Spring 常用注解

240 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

Spring 常用注解

@Autowired @Value

image.png 在Spring中CommonAnnotationBeanPostProcessor处理了@Resource, AutowiredAnnotationBeanPostProcessor处理了@Autowired@Value@Inject

  • @Autowired、@Inject(Java JSR330中的规范)、@Resource(Java JSR250中的规范), 都可以用于Spring Bean的注入 Spring Bean的注入支持注入集合
// 注入所有IService类型的bean到List
@Autowired
private List<IService> serviceList;
// 注入所有IService类型的bean到Map, Map的key为beanName
@Autowired
private Map<String, IService> serviceMap;
  • @Value用于配置注入, 支持SpringEL表达式
 // 普通, : 后是默认值
 @Value("${aa}")
 @Value("${aa:xx}")
 // List
 @Value("#{"${aa}".split(',')}")
 // Map
 @Value("#{${aa}}")
 // Date类型	
 @Value("#{new java.text.SimpleDateFormat("yyyy-MM-dd").parse("${date}")}") 

当然注入复杂对象配置我们使用SpringBoot提供的@ConfigurationProperties会更加方便

@Component

声明为一个Spring组件, 被很多其他Spring注解引用

@Configuration @Bean

@Bean作用于方法上, 返回一个对象 @Configuration声明为一个配置类, 用于声明一个或多个@Bean方法, @Bean方法默认执行一次, 5.2后增加proxyBeanMethods属性, 默认true, proxyBeanMethods=false @Bean方法每次创建新的对象

@Repository @Service @Controller @RestController

声明为数据层、服务层、控制层, @RestController为响应json数据控制层

@RequestMapping @GetMapping @PostMapping @PutMapping @PatchMapping @DeleteMapping

@RequestMapping支持所有方式地址映射, 其余的是声明固定请求方式的地址映射, GET/POST/PUT/PATCH/DELETE

@RequestBody

请求数据为json格式

@ResponseBody

响应数据为json格式

@PathVariable

解析URL上的值绑定到方法参数上

@GetMapping("/details/{id}")
public R details(@PathVariable Integer id) {
    return R.isOk();
}

@ControllerAdvice @RestControllerAdvice

全局异常处理, @RestControllerAdvice响应json数据

@ExceptionHandler(Exception.class)
public R globalExceptionHandler(Exception e) {
    // do something ...
}

@Transactional

声明式事务 该注解被@Inherited标记支持继承

  • isolation隔离级别默认为数据库的默认隔离级别, MySQL InnoDB默认级别为可重复读(Repeated Read)
  • timeout超时时间(秒), 默认-1
  • rollbackFor默认回滚RuntimeExceptionError image.png

@DependsOn

指定当前bean依赖的bean, 用于@Component/@Bean image.png

@EnableScheduling @Scheduled

定时任务, 支持cron表达式

@Import @Enablexxx

导入外部类, @Enablexxx中会使用@Import导入外部类

@Primary

多个实例, 默认优先选择被@Primary标记的

@Lazy

延迟加载

@EnableCaching @Cacheable @CachePut @CacheEvict

接口缓存, 可使用RedisCacheManager管理, 参考我之前的文章

@Profile

环境激活配置, 用于区分不同环境下的配置, 如@Profile(value = {"dev", "test"})

@PostConstruct

@PostConstruct注解的方法将会在依赖注入完成后被调用, 其实不是Spring的注解, 是Java EE5规范中用于影响Servlet生命周期的注解

@Aspect

用于标记为切面, 并不是Spring的注解, AspectJ来自于Eclipse基金会, Spring AOP使用动态代理方式实现, AspectJ AOP使用静态织入方式实现, 从功能上看, AspectJ AOP比Spring AOP更加强大, 性能也更好, 但是需要使用ajc编译, 使用相对于Spring来说更加复杂

@Order

改变执行顺序, 值越小优先级越高, 可以搭配@Aspect使用, 改变切面的执行顺序等