springboot注解–基础–03–自动配置类的常用注解
1、规则
- 以AutoConfiguration结尾
- xxxxxAutoConfiguration
- xxxxxAutoConfiguration
2、常用注解
-
ServletWebServerFactoryAutoConfiguration 作为案例
-
对应的注解截图如下
2.1、Configuration
2.1.1、AliasFor
- @Configuration(value = “com.fei”)
- value=“com.fei” 是Component注解的value使用。
2.1.2、proxyBeanMethods = false
- 用来指定@Bean注解标注的方法是否使用代理
- true
- 使用代理,直接从IOC容器之中取得对象
- false
- 不使用注解,每次调用@Bean标注的方法获取到的对象和IOC容器中的都不一样,是一个新的对象
- 可以将此属性设置为false来提高性能;
- true
2.2、@AutoConfigureOrder
- 配置类的加载顺序
- 数字越小,越优先加载,负数也可以。
2.2、@ConditionalOnClass(ServletRequest.class)
- 在classpath下能找到ServletRequest类才会构建这个bean
- 当前的bean:ServletWebServerFactoryAutoConfiguration
2.2.1、@Conditional(OnClassCondition.class)
-
按照一定的条件进行判断,满足条件给容器注册bean。
-
@ConditionalOnClass
- 只有当指定的类在类路径存在时,标注该注解的组件才会被装配。
- 实际上是通过ClassLoader#loadClass(className) 或者 Class.forName(className) 方法判断类是否在类路径存在的。
2.2.2、类似的注解
- @ConditionalOnBean
- 仅仅在当前上下文中存在某个对象时,才会实例化一个Bean
- @ConditionalOnClass
- 某个class位于类路径上,才会实例化一个Bean
- @ConditionalOnExpression
- 当表达式为true的时候,才会实例化一个Bean
- @ConditionalOnMissingBean
- 仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean
- @ConditionalOnMissingClass
- 某个class类路径上不存在的时候,才会实例化一个Bean
- @ConditionalOnNotWebApplication
- 不是web应用,才会实例化一个Bean
2.3、@ConditionalOnWebApplication(type = Type.SERVLET)
- 如果当前项目是一个Web应用时(servlet),才会实例化一个Bean
2.4、@EnableConfigurationProperties(ServerProperties.class)
- 让 @ConfigurationProperties注解的类生效。
2.5、@ConditionalOnMissingFilterBean(ForwardedHeaderFilter.class)
- ForwardedHeaderFilter的对象不存在时,才会实例化一个Bean
2.6、@ConditionalOnProperty(value = “server.forward-headers-strategy”, havingValue = “framework”)
- 控制配置类是否生效,可以将配置与代码进行分离,实现了更好的控制配置.
- 通过havingValue与配置文件中的值对比,返回为framework则配置类生效,反之失效.