你好,我是柳岸花开。
在现代的Java开发中,Spring框架成为了无可争议的霸主。其强大的依赖注入和面向切面编程能力让开发者摆脱了繁琐的配置,专注于业务逻辑的实现。而Spring的核心功能正是通过一系列的注解来实现的。本文将带您了解Spring中不常用的注解。
1. @Qualifier
@Qualifier
注解用于限定自动装配的Bean,可以用在属性、构造函数和Setter方法上。
@Service
public class AppService {
@Autowired
@Qualifier("specificUserRepository")
private UserRepository userRepository;
}
2. @Scope
@Scope
注解用于定义Bean的作用域,可以用在@Component
、@Service
、@Repository
等注解以及@Bean方法上。
@Component
@Scope("prototype")
public class AppComponent {
// ...
}
3. @Import
@Import
注解用于导入其他配置类,可以用在@Configuration
类上。
@Configuration
@Import(AnotherConfig.class)
public class AppConfig {
// ...
}
4. @ImportResource
@ImportResource
注解用于导入XML配置文件,可以用在@Configuration
类上。
@Configuration
@ImportResource("classpath:application-context.xml")
public class AppConfig {
// ...
}
5. @Profile
@Profile
注解用于定义配置类或Bean仅在特定的Profile激活时才会生效,可以用在@Configuration
类或@Bean方法上。
@Configuration
@Profile("production")
public class ProductionConfig {
// ...
}
6. @Order
@Order
注解用于定义Bean初始化顺序,可以用在@Configuration
、@Component
、@Service
、@Repository
等注解以及@Bean方法上。
@Configuration
@Order(1)
public class AppConfig {
// ...
}
7. @Lazy
@Lazy
注解用于延迟初始化Bean,可以用在@Component
、@Service
、@Repository
等注解以及@Bean方法上。
@Component
@Lazy
public class AppComponent {
// ...
}
8. @EnableCaching
@EnableCaching
注解用于启用缓存功能,可以用在@Configuration
类上。
@Configuration
@EnableCaching
public class AppConfig {
// ...
}
9. @Cacheable
@Cacheable
注解用于将方法返回值缓存起来,可以用在方法上。
@Service
public class AppService {
@Cacheable("users")
public User getUser(Long id) {
// ...
}
}
10. @CacheEvict
@CacheEvict
注解用于清除缓存,可以用在方法上。
@Service
public class AppService {
@CacheEvict(value = "users", allEntries = true)
public void deleteUser(Long id) {
// ...
}
}
11. @CachePut
@CachePut
注解用于将方法返回值放入缓存,并且总是执行方法,可以用在方法上。
@Service
public class AppService {
@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
// ...
}
}
12. @EnableScheduling
@EnableScheduling
注解用于启用定时任务功能,可以用在@Configuration
类上。
@Configuration
@EnableScheduling
public class AppConfig {
// ...
}
13. @Scheduled
@Scheduled
注解用于定义定时任务方法,可以用在方法上。
@Component
public class AppTask {
@Scheduled(cron = "0 0 * * * ?")
public void execute() {
// ...
}
}
14. @EnableAsync
@EnableAsync
注解用于启用异步方法执行功能,可以用在@Configuration
类上。
@Configuration
@EnableAsync
public class AppConfig {
// ...
}
15. @Async
@Async
注解用于定义异步执行的方法,可以用在方法上。
@Service
public class AppService {
@Async
public CompletableFuture<String> asyncMethod() {
// ...
}
}
16. @EnableAutoConfiguration
@EnableAutoConfiguration
注解用于启用自动配置功能,可以用在@Configuration
类上。
@Configuration
@EnableAutoConfiguration
public class AppConfig {
// ...
}
17. @Conditional
@Conditional
注解用于定义条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@Conditional(AppCondition.class)
public AppBean appBean() {
// ...
}
}
18. @ConditionalOnClass
, @ConditionalOnMissingClass
这些注解用于定义在特定类存在或不存在时的条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@ConditionalOnClass(name = "com.example.MyClass")
public AppBean appBean() {
// ...
}
}
19. @ConditionalOnBean
, @ConditionalOnMissingBean
这些注解用于定义在特定Bean存在或不存在时的条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@ConditionalOnBean(name = "myOtherBean")
public AppBean appBean() {
// ...
}
}
20. @ConditionalOnProperty
@ConditionalOnProperty
注解用于定义在特定属性存在或满足条件时的条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@ConditionalOnProperty(name = "autoregister.enabled", havingValue = "true")
public AppBean appBean() {
// ...
}
}
21. @ConditionalOnResource
@ConditionalOnResource
注解用于定义在特定资源存在时的条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@ConditionalOnResource(resources = "classpath:my-resource.properties")
public AppBean appBean() {
// ...
}
}
22. @ConditionalOnExpression
@ConditionalOnExpression
注解用于定义在特定SpEL表达式计算为true时的条件配置,可以用在@Configuration
类或@Bean方法上。
@Configuration
public class AppConfig {
@Bean
@ConditionalOnExpression("#{systemProperties['app.property'] == 'bob'}")
public AppBean appBean() {
// ...
}
}
23. @ExceptionHandler
@ExceptionHandler
注解用于处理控制器中的异常,可以用在方法上。
@RestController
public class AppController {
// ...
@ExceptionHandler(AppException.class)
public ResponseEntity<String> handleAppException(AppException ex) {
// ...
}
}
24. @ResponseStatus
@ResponseStatus
注解用于设置HTTP响应状态码,可以用在@ExceptionHandler
方法或
异常类上。
@ResponseStatus(HttpStatus.NOT_FOUND)
public class AppNotFoundException extends RuntimeException {
// ...
}
25. @ControllerAdvice
@ControllerAdvice
注解用于定义全局控制器通知,可以用在类上。
@ControllerAdvice
public class AppControllerAdvice {
// ...
}
26. @ModelAttribute
@ModelAttribute
注解用于将方法的返回值添加到模型中,可以用在方法上。
@Controller
public class AppController {
@ModelAttribute("user")
public User getUser() {
// ...
}
}
27. @SessionAttributes
@SessionAttributes
注解用于将模型中的属性存储到会话中,可以用在类上。
@Controller
@SessionAttributes("user")
public class AppController {
// ...
}
28. @CookieValue
@CookieValue
注解用于绑定HTTP请求中的Cookie值到方法参数,可以用在方法参数上。
@Controller
public class AppController {
@GetMapping("/hello")
public String hello(@CookieValue("username") String username) {
// ...
}
}
29. @InitBinder
@InitBinder
注解用于在控制器中初始化数据绑定器,可以用在方法上。
@Controller
public class AppController {
@InitBinder
public void initBinder(WebDataBinder binder) {
// ...
}
}
以上是一些在Spring中不常用的注解及其用法。希望这篇文章对你理解Spring框架有所帮助!
本文由 mdnice 多平台发布