springboot注解说明
2025-02-27 12:58:02 4 举报
AI智能生成
springboot注解说明
作者其他创作
大纲/内容
@SpringBootApplication<br>
@Target(ElementType.TYPE):设置当前注解可以标记在哪里<br>
TYPE: 类<br>
FIELD:属性<br>
METHOD:方法<br>
PARAMETER:方法参数<br>
...<br>
@Retention(RetentionPolicy.RUNTIME): 注解的保留策略<br>
SOURCE:编译后,只保留class源文件,但是类上的注解都会失效<br>
CLASS:编译后,会保留注解,但是JVM无法找到注解,也就是通过反射机制是找不到这个注解的<br>
RUNTIME:这种才是我们常用的正常模式,会被JVM加载<br>
@Documented
生产java doc(java文档)时,会生成注解信息<br>
@Inherited
类上的注解,会被子类继承
@SpringBootConfiguration
核心是@Configuration,标注当前类为springboot的配置类<br>
@EnableAutoConfiguration
启动自动配置,以前spring中的xml配置,由springboot来自动加载配置自动配置类
AutoConfigurationPackages:将当前配置类所在包保存到BasePackages的Bean中,以供spring内部使用,自己一般用不到<br>
AutoConfigurationImportSelector:实现自动扫描并加载自动配置类<br>
3.0之前通过在META-INF/spring.factories文件中实现装配<br>
3.0之后,通过SPI的方式实现装配<br>
可以通过在application.yml中,配置debug=true,然后在启动时,就能打印出哪些自动配置类生效,哪些未生效<br>
@ComponentScan
用来识别需要加载哪些配置类,默认扫描当前包及其下面的所有类
通过basePackages来指定扫描包路径
lazyInit是否启用懒加载,懒加载启动时,只有类被调用时,才会加载
excludeFilters:设置排除规则<br>
FilterType
ANNOTATION:默认,根据注解的完整限定名设置排除/包括<br>
ASSIGNABLE_TYPE:根据类的完整限定名设置排除/包括<br>
ASPECTJ:根据切面表达式设置<br>
REGEX:根据正则表达式设置<br>
CUSTOM:自定义方式,需要指定classes,来指定排除规则<br>
该类需要继承TypeExcludeFilter,重写match方法,match中返回true的就会被排除<br>
AutoConfigurationExcludeFilter,排除自动配置类
@Import(spring3的注解)<br>
将普通类注入spring容器,和Component等一样的效果
通过实现ImportSelector接口,重写selectImports方法,在方法中,可以根据业务需求,实现动态注入(返回String数组,数组中是动态注入的类路径)<br>
通过实现ImportBeanDefinitionRegistrar接口,重写registerBeanDefinitions方法,不仅可以实现动态注入,还可以对注入的类进行操作,例如添加属性<br>
@Configuration(spring3的注解)<br>
proxyBeanMethods
true:默认,创建cglib动态代理,实现一个增强<br>作用(增强):每次调用本类中的Bean方法时,不会去重新创建(new),而是会去容器中查找,提高效率(因为Bean不做多例配置的话,默认是单例)<br>
false:不使用代理增强,可以理解为,将本类中的Bean方法变成多例<br>
@EnableConfigurationProperties({ServerProperties.class})<br>
将ServerProperties注册为Bean,在加了这个注解的当前类中,启用了ServerProperties中的属性,也就是说可以直接用,一般通过在构造方法中进行调用和赋值
其实和直接通过autowired注入ServerProperties感觉差不多
@ConditionalOnXXXXX<br>当前配置类,是否起作用的一些条件
ConditionalOnWebApplication
当前是web环境
ConditionalOnBean
存在指定的Bean<br>
ConditionalOnClass
有指定的类
ConditionalOnExpression
满足SpEL表达式指定的内容
ConditionalOnJava
符合指定的java版本
ConditionalOnJndi
JNDI存在指定项
ConditionalOnMissingBean
不存在指定的Bean
ConditionalOnMissingClass
不存在指定的类
ConditionalOnNotWebApplication
当前不是web环境
ConditionalOnProperty
指定的属性值(prefix.value = matchIfMissing/havingValue)是否存在或匹配<br>
ConditionalOnResource
指定resources下的文件是否存在<br>
ConditionalOnSingleCandidate
容器中只有一个指定的Bean,或这个Bean是首选Bean
Conditional(自定义Conditional类,实现Conditional接口)<br>
实现match方法,根据实际业务编写过滤机制
0 条评论
下一页