SpringBoot开发——Spring Boot 的9大类常用注解
文章目录
- 1. 组件相关注解
-
- 1.1 @Controller:
- 1.2 @Service:
- 1.3 @Repository:
- 1.4 @Component:
- 2. 与 Bean 实例和生命周期相关的注解
-
- 2.1 @Bean:
- 2.2 @Scope:
- 2.3 @Primary:
- 2.4 @PostConstruct:
- 2.5 @PreDestroy:
- 3. 依赖注入注解
-
- 3.1 @Autowired:
- 3.2 @Resource:
- 3.3 @Qualifier:
- 4. SpringMVC 相关注解
-
- 4.1 @RequestMapping:
- 4.2 @RequestBody:
- 4.3 @ResponseBody:
- 4.4 @RestController:
- 4.5 @RequestParam:
- 4.6 @PathVariable:
- 4.7 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:
- 5. 配置相关注解
-
- 5.1 @Configuration:
- 5.2 @EnableAutoConfiguration:
- 5.3 @ComponentScan:
- 5.4 @SpringBootApplication:
- 5.5 @EnableTransactionManagement:
- 5.6 @ConfigurationProperties:
- 5.7 @Conditional:
- 5.8 @Value:
- 5.9 @ConfigurationProperties:
- 5.10 @PropertySource:
- 5.11 @ImportResource:
- 6. JPA 相关注解
-
- 6.1 @Entity 和@Table:
- 6.2 @Id:
- 6.3 @Column:
- 6.4 @GeneratedValue:
- 6.5 @SequenceGenerator:
- 6.6 @Transient:
- 6.7 @Basic(fetch = FetchType.LAZY):
- 6.8 @JoinColumn:
- 6.9 @OneToOne、@OneToMany 和@ManyToOne:
- 7. 异常处理相关注解
-
- 7.1 @ControllerAdvice 和@ExceptionHandler:
- 8. AOP 相关注解
-
- 8.1 @Aspect:
- 8.2 @Before:
- 8.3 @After:
- 8.4 @AfterReturning:
- 8.5 @AfterThrowing:
- 8.6 @Around:
- 8.7 @Pointcut:
- 8.8 @Order:
- 9. 测试相关注解
-
- 9.1 @Test:
- 9.2 @ActiveProfiles:
- 9.3 @RunWith 和@SpringBootTest:
1. 组件相关注解
1.1 @Controller:
用于修饰 MVC 中控制器层的组件。Spring Boot 中的组件扫描功能会识别此注解,并为被修饰的类实例化一个对象。它通常与@RequestMapping 一起使用。当 Spring MVC 收到请求时,会将其转发到指定路径的方法进行处理。
@Controller
@RequestMapping("/user/admin")
public class UserAdminController {
}
1.2 @Service:
通常用于修饰服务层的组件。声明一个对象时,会实例化该类对象并将其注入到 bean 容器中。
@Service
public class UserService {
//...
}
1.3 @Repository:
用于修饰数据访问对象(DAO)层的组件。DAO 层的组件专注于系统数据的处理,例如数据库中的数据。它们也会被组件扫描并生成实例化对象。
@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
//...
}
1.4 @Component:
一般指代组件。当组件难以分类时,可以使用此注解进行标记。其功能与@Service 类似。
@Component
public class DemoHandler {
//...
}
2. 与 Bean 实例和生命周期相关的注解
2.1 @Bean:
用于修饰方法,表示该方法将创建一个 Bean 实例,并由 Spring 容器进行管理。示例代码如下:
@Configuration
public class AppConfig {
// 相当于在 XML 中配置一个 Bean
@Bean
public Uploader initFileUploader() {
return new FileUploader();
}
}
2.2 @Scope:
用于声明 Spring Bean 实例的作用域。作用域如下:
- singleton:单例模式。在 Spring 容器中实例是唯一的,这是 Spring 的默认实例作用域类型。
- prototype:原型模式。每次使用时都会重新创建实例。
- request:在同一请求中使用相同的实例,不同请求创建新的实例。
- session:在同一会话中使用相同的实例,不同会话创建新的实例。
@Configuration
public class RestTemplateConfig {
@Bean
@Scope("singleton")
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2.3 @Primary:
当存在同一对象的多个实例时,优先选择此实例。
@Configuration
@ComponentScan
public class JavaConfig {
// 首选
@Bean("b1")
@Primary
B b1() {
return new B();
}
@Bean("b2")
B b2() {
return new B();
}
}
2.4 @PostConstruct:
用于修饰方法,在对象实例创建和依赖注入完成后执行,可用于初始化对象实例。
2.5 @PreDestroy:
用于修饰方法,在对象实例即将被 Spring 容器移除时执行,可用于释放对象实例持有的资源。
public class Demo {
public Demo() {
System.out.println("构造方法...");
}
public void init() {
System.out.println("init...");
}
}
@PostConstruct
public void postConstruct() {
System.out.println("postConstruct...");
}
@PreDestroy
public void preDestroy() {
System.out.println("preDestroy...");
}
public void destroy() {
System.out.println("destroy...");
}
输出:
构造方法...
postConstruct...
init...
preDestroy...
destroy...
3. 依赖注入注解
3.1 @Autowired:
根据对象的类型自动注入依赖对象。默认情况下,它要求注入的对象实例必须存在。可以配置 required = false 来注入可能不存在的对象。
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired(required = false)
private UserConfig userConfig;
}
3.2 @Resource:
默认情况下,根据对象的名称自动注入依赖对象。如果要根据类型注入,可以设置属性
type = UmsAdminService.class。
@Controller
@RequestMapping("/user")
public class UserController {
@Resource(name = "userServiceImpl")
private UserService userService;
}
3.3 @Qualifier:
当存在同一类型的多个 bean 时,使用@Autowired 导入会导致错误,表示当前对象不唯一,Spring 不知道要导入哪个依赖。此时,我们可以使用@Qualifier 进行更细粒度的控制并选择其中一个实例。它通常与@Autowired 一起使用。示例如下:
@Autowired
@Qualifier("deptService")
private