Spring——注解大全

声明bean的注解

  • @Component 组件,没有明确的角色
  • @Service 在业务逻辑层使用(service层)
  • @Repository 在数据访问层使用(dao层)
  • @Controller 在展现层使用,控制器的声明

注入bean的注解

  • @Autowired:由Spring提供,根据类型进行自动装配,如果组合@Qualifier使用将按名称进行装配
  • @Inject:由JSR-330提供使用时需要导入javax.inject.Inject;实现注入同样是根据类型进行自动装配,如果需要按名称进行装配,则需要配合@Named
  • @Resource:由JSR-250提供,使用需要导入javax.annotation,根据名称进行自动装配的,一般会指定一个name属性

功能注解

  • @Transactional声明事务
  • @Cacheable声明缓存

配置类相关注解

  • @Configuration 声明当前类为配置类
  • @Bean 注解在方法上,声明当前方法的返回值为一个bean
  • @ComponentScan 用于对Component进行扫描,
  • @WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

切面(AOP)相关注解

  • @Aspect 声明一个切面
  • @After 在方法执行之后执行
  • @Before 在方法执行之前执行
  • @Around 在方法执行之前与之后都执行
  • @PointCut 声明切点

@Bean的属性支持

@Scope设置Spring新建Bean的类型,可选择包括:

  • Singleton 单例,一个Spring容器中只有一个bean实例,默认模式
  • Protetype 每次调用新建一个bean
  • Request web项目中,给每个http request新建一个bean
  • Session web项目中,给每个http session新建一个bean
  • GlobalSession(给每一个 global http session新建一个Bean实例

类生命周期注解

  • @PostConstruct 由JSR-250提供,在类的构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
  • @PreDestory 由JSR-250提供,在Bean销毁之前执行

配置注入

@Value为属性注入值,支持如下方式的注入:

  • 普通字符@Value(“Michael Jackson”)
  • 操作系统属性@Value(“#{systemProperties[‘os.name’]}”)
  • 表达式结果@Value(“#{ T(java.lang.Math).random() * 100 }”)
  • 其它bean属性@Value(“#{domeClass.name}”)
  • 文件资源@Value(“classpath:cn/shiyujun/test.txt”)
  • 网站资源@Value(“https://shiyujun.cn")
  • 配置文件属性@Value(“${book.name}”)
  • 注入配置文件@PropertySource(“classpath:cn/shiyujun/test.propertie”)

环境切换

  • @Profile 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境
  • @Conditional根据代码中设置的条件装载不同的bean,包括一系列的注解
  • @ConditionalOnBean存在bean
  • @ConditionalOnMissingBean不存在bean
  • @ConditionalOnClass存在某个类
  • @ConditionalOnMissingClass不存在某个类
  • @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, havingValue = “token”)当存在配置文件中以syj为前缀的属性,属性名称为algorithm,然后它的值为token时才会实例化一个类。
  • @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, havingValue = “counter”, matchIfMissing = true)如果所有的都不满足的话就选择counter为默认实现
  • @ConditionalOnJava如果是Java应用
  • @ConditionalOnWebApplication如果是Web应用

异步相关

@Async 在实际执行的bean方法使用该注解来申明其是一个异步任务

定时任务相关

@Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型

事务相关

@Transactional注解可以作用于接口、接口方法、类以及类方法上 ,管理事务。

开启某些功能

  • @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持
  • @EnableAsync 开启异步方法的支持
  • @EnableScheduling 开启计划任务的支持
  • @EnableWebMvc 开启Web MVC的配置支持
  • @EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持
  • @EnableJpaRepositories 开启对SpringData JPA Repository的支持
  • @EnableTransactionManagement 开启注解式事务的支持
  • @EnableCaching 开启注解式的缓存支持

测试相关注解

  • @RunWith Spring中通常用于对JUnit的支持
  • @ContextConfiguration 用来加载配置ApplicationContext

SpringMVC部分

  • @RequestMapping 用于映射Web请求,包括访问路径和参数
  • @ResponseBody 支持将返回值放在response内,而不是一个页面
  • @PathVariable 用于接收路径参数
  • @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody
  • @ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上, 这对所有注解了 @RequestMapping的控制器内的方法有效。
  • @ExceptionHandler 用于全局处理控制器里的异常
  • @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
  • @ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的- @RequestMapping都能获得在此处设置的键值对。

SpringBoot相关

  • @EnableAutoConfiguration自动载入应用程序所需的所有Bean。该注解组合了@Import注解,@Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。而spring.factories里声明了有哪些自动配置​+ @SpingBootApplication SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置
  • @ImportResource加载xml配置的
  • @AutoConfigureAfter在指定的自动配置类之后再配置
文章目录
  1. 1. 声明bean的注解
  2. 2. 注入bean的注解
  3. 3. 功能注解
  4. 4. 配置类相关注解
  5. 5. 切面(AOP)相关注解
  6. 6. @Bean的属性支持
  7. 7. 类生命周期注解
  8. 8. 配置注入
  9. 9. 环境切换
  10. 10. 异步相关
  11. 11. 定时任务相关
  12. 12. 事务相关
  13. 13. 开启某些功能
  14. 14. 测试相关注解
  15. 15. SpringMVC部分
  16. 16. SpringBoot相关
|