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

收藏
0 条评论
下一页