ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-13 21:31:03  阅读:196  来源: 互联网

标签:SpringBoot SERVLET Bean 某个 注解 WebMvcAutoConfiguration class 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:是不是在某个云平台上

 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有