你好,我是柳岸花开。
在现代的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 多平台发布