其他分享
首页 > 其他分享> > SpringBoot学习笔记(五)——Springboot中的条件注解

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})
所以总结⼀下,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:是不是在某个云平台上

 

标签:SpringBoot,SERVLET,Bean,某个,注解,WebMvcAutoConfiguration,class,Springboot
来源: https://www.cnblogs.com/worthmove/p/16690920.html