SpringBoot学习笔记(五)——Springboot中的条件注解

1.为什么需要有条件注解

只⾃动配置类中,通常能看到很多条件注解(⽐如@ConditionalOnClass、@ConditionalOnBean),这是因为,如果我们要⽤Spring Boot的⾃动配置功能,就会加上@EnableAutoConfiguration注解,从
⽽就会将解析spring.factories⽂件中的所有⾃动配置类,但是在⼀个项⽬中并不是所有⾃动配置类都要使⽤到。
⽐如我不需要⽤到MVC,那么WebMvcAutoConfiguration就没什么⽤,⽐如我不⽤Jta,那JtaAutoConfiguration也就没什么⽤,没⽤的配置类,就不要让Spring去解析它。条件注解就⽤来实现这种控制的。

2.一个使用条件注解的例子

⽐如WebMvcAutoConfiguration上就有:
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class,
WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
  • @ConditionalOnWebApplication(type = Type.SERVLET),表示WebMvcAutoConfiguration只有在应⽤类型是SERVLET类型是才⽣效
  • @ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class}),表示只有在项⽬以及依赖中存在这三个类时,WebMvcAutoConfiguration才⽣效
  • @ConditionalOnMissingBean({WebMvcConfigurationSupport.class}),表示只有Spring容器中没有WebMvcConfigurationSupport.class类型的Bean时,WebMvcAutoConfiguration才⽣效
所以总结⼀下,WebMvcAutoConfiguration⽣效的条件是:当前应⽤类型是SERVLET类型的Web项⽬,并且项⽬的classpath中存在Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class三
个,并且项⽬的Spring容器中没有WebMvcConfigurationSupport.class类型的Bean。

3.条件注解的类型

1. ConditionalOnBean:是否存在某个某类或某个名字的Bean
2. ConditionalOnMissingBean:是否缺失某个某类或某个名字的Bean
3. ConditionalOnSingleCandidate:是否符合指定类型的Bean只有⼀个
4. ConditionalOnClass:是否存在某个类
5. ConditionalOnMissingClass:是否缺失某个类
6. ConditionalOnExpression:指定的表达式返回的是true还是false
7. ConditionalOnJava:判断Java版本
8. ConditionalOnJndi:JNDI指定的资源是否存在
9. ConditionalOnWebApplication:当前应⽤是⼀个Web应⽤
10. ConditionalOnNotWebApplication:当前应⽤不是⼀个Web应⽤
11. ConditionalOnProperty:Environment中是否存在某个属性
12. ConditionalOnResource:指定的资源是否存在
13. ConditionalOnWarDeployment:当前项⽬是不是以War包部署的⽅式运⾏
14. ConditionalOnCloudPlatform:是不是在某个云平台上

 

posted @ 2022-09-13 21:21  一直学习的程序小白  阅读(530)  评论(0编辑  收藏  举报