@Configuration

说明

相当于把该类作为Spring的XML配置文件中的beans标签,说明这是一个配置类

用法

将该注解放在类的上面

1
2
3
4
5
6
7
8
9
10
11
12
package com.ledao.config;

import org.springframework.context.annotation.Configuration;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Configuration
public class MyConfig {
}

@Bean

说明

等价于Spring的XML配置文件中的bean标签,用于注册bean对象

用法

标注在方法上(返回某个实例的方法),如果没有定义name属性那么bean的id为方法名,定义了name属性那么bean的id为name的属性值(这时候就不可以用方法名了);这个方法的名字相当于bean标签中id属性,这个方法的返回值相当于bean标签中的class属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.ledao.config;

import com.ledao.entity.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Configuration
public class MyConfig {

@Bean
public Student student(){
Student student = new Student();
student.setName("tom");
return student;
}
}

@Component

说明

用于注册bean对象,相当于XML配置文件的bean标签

用法

将该注解放在类的上面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.ledao.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Component
public class Student {

@Value(value = "tom")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}

@Repository

说明

用于注册bean对象,相当于XML配置文件的bean标签,和@Component一样的效果,对应持久层(即dao接口的实现类),主要用于数据库相关操作

用法

在dao接口的实现类上使用这个注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.ledao.dao;

import org.springframework.stereotype.Repository;

/**
* @author LeDao
* @company
* @create 2022-02-16 21:31
*/
@Repository(value = "userDao")
public class UserDaoImpl implements UserDao{

@Override
public void add() {
System.out.println("添加用户");
}

@Override
public void delete() {
System.out.println("删除用户");
}

@Override
public void update() {
System.out.println("修改用户");
}

@Override
public void findById() {
System.out.println("根据id查找用户");
}
}

@Service

说明

用于注册bean对象,相当于XML配置文件的bean标签,和@Component一样的效果,对应服务层(即Service接口的实现类),主要用于设计一些复杂的逻辑,需要用到dao层

用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.ledao.service.impl;

import com.ledao.dao.UserDao;
import com.ledao.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* @author LeDao
* @company
* @create 2022-02-16 21:04
*/
@Service(value = "userService")
public class UserServiceImpl implements UserService {

@Autowired
private UserDao userDao;

@Override
public void add() {
userDao.add();
}

@Override
public void delete() {
userDao.delete();
}

@Override
public void update() {
userDao.update();
}

@Override
public void findById() {
userDao.findById();
}
}

@Controller

说明

用于注册bean对象,相当于XML配置文件的bean标签,和@Component一样的效果,对应Spring MVC控制层,主要用于接收用户请求并调用Service层返回数据给前端页面

用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.ledao.controller.admin;

import com.ledao.entity.BookType;
import com.ledao.entity.PageBean;
import com.ledao.service.BookService;
import com.ledao.service.BookTypeService;
import com.ledao.util.StringUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* 后台图书类别Controller层
*
* @author LeDao
* @company
* @create 2022-01-21 23:57
*/
@RestController
@RequestMapping("/admin/bookType")
public class BookTypeAdminController {

@Resource
private BookTypeService bookTypeService;

/**
* 检查图书类别id是否存在
*
* @param bookTypeId
* @return
*/
@RequestMapping("/checkBookTypeId")
public Map<String, Object> checkBookTypeId(@RequestParam(value = "bookTypeId", required = false) Integer bookTypeId) {
Map<String, Object> resultMap = new HashMap<>(16);
BookType bookType = bookTypeService.findById(bookTypeId);
if (bookType == null) {
resultMap.put("success", false);
resultMap.put("errorInfo", "你选择的图书类别不存在,请重新选择!!");
} else {
resultMap.put("success", true);
}
return resultMap;
}
}

@Value

用来给变量注入值,详细说明和用法查看博客:Spring框架@Value注解的使用

@Autowired和@Resource

这两个注解都是用于实现Spring的自动装配,详细说明和用法查看博客:使用注解实现Spring自动装配

@Scope

定义配置类下的某个使用了@bean注解的方法的作用域

用法

Spring bean的默认作用域为singleton

某个使用了@bean注解的方法的上面使用这个注解时定义该方法的作用域,只对该方法有效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.ledao.config;

import com.ledao.entity.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Configuration
public class MyConfig {

@Bean
@Scope(value = "prototype")
public Student student(){
return new Student();
}
}

@ComponentScan

说明

用于定义扫描的路径并从中找出标识了需要装配的类自动装配到spring的bean容器中(使用@Component注解的类)

用法

一般在配置类上使用,扫描指定包下的类,将所有需要装配的类都装配到spring的bean容器中;如果不使用这个注解的话,只会装配该配置类下使用了@bean的方法对应的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.ledao.config;

import com.ledao.entity.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Configuration
@ComponentScan("com.ledao.entity")
public class MyConfig {

@Bean
public Student student(){
return new Student();
}
}

如果要扫描多个包,用法如下:(也可以使用@ComponentScans注解)

1
@ComponentScan(value = {"com.ledao.entity","com.ledao.service.impl"})

@ComponentScans

说明

和@ComponentScan一样的效果,用于扫描多个包

用法

1
@ComponentScans(value = {@ComponentScan(value = "com.ledao.entity"), @ComponentScan(value = "com.ledao.service.impl")})

@Import

说明

用于导入其他配置类的配置

用法

要导入其他配置类的配置类上使用,@Import()括号内填要导入的配置类名称.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.ledao.config;

import com.ledao.entity.Student;
import org.springframework.context.annotation.*;

/**
* @author LeDao
* @company
* @create 2022-02-15 20:39
*/
@Configuration
@Import(MyConfig2.class)
public class MyConfig {

@Bean
public Student student(){
return new Student();
}
}

@Aspect

说明

用于标注使用这个注解的类是一个切面

用法

查看博客:Spring 使用注解实现 AOP | LeDao 的博客 (zoutl.cn)

@Before

说明

执行业务代码前先执行这个方法

用法

查看博客:Spring 使用注解实现 AOP | LeDao 的博客 (zoutl.cn)

@After

说明

执行业务代码后再执行这个方法

用法

查看博客:Spring 使用注解实现 AOP | LeDao 的博客 (zoutl.cn)

@Around

说明

环绕增强方法使用

用法

查看博客:Spring 使用注解实现 AOP | LeDao 的博客 (zoutl.cn)

@EnableAspectJAutoProxy

说明

启动AspectJ自动代理

用法

查看博客:Spring 使用注解实现 AOP | LeDao 的博客 (zoutl.cn)

@Transactional

说明

用于实现事务

用法

查看博客:Spring 使用 @Transactional 注解实现事务 | LeDao 的博客 (zoutl.cn)