spring注解整理
@Configuration
使用@Configuration注解来标注的类为配置类,配置类就相当于配置文件,可以在配置类中来配置bean
1 |
|
Bean
使用@Bean来标注方法以此来进行bean的实例化,bean的类型是返回类型,bean的id默认是方法名称,可以使用@Bean注解来自定义bean的id以及初始化方法、销毁方法
1 | public Bean { |
bean的作用域@Scope
可以在生成bean的方法上使用@Scope来指定bean的作用域
- ConfigurableBeanFactory#SCOPE_PROTOTYPE
- ConfigurableBeanFactory#SCOPE_SINGLETON
- org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
- org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
懒加载@Lazy
对于单例bean默认是在容器启动的时候加载,可以使用懒加载来使其第一次调用时在进行加载
在生成bean的方法上使用@Lazy来使用来加载
bean的条件注册@Conditional
@Conditional可以标注在类上,也可以标注在方法上,
1 | public Conditional { |
可以自定义Condition,需要实现Condition接口
@Primary
如果存在多个相同类型的bean,可以使用@Primary注解来标注bean,使得该bean为默认获取到的bean
工厂bean
可以使用FactoryBean来使用工厂bean来实例化bean,此时使用personFactoryBean来获取到的是Person的实例
1 |
|
如果想要获取到FactoryBean本身的实例,可以使用&personFactoryBean来获取
@ComponentScan
在配置类上标注组件扫描,相当于<context:component-scan>可以配置扫描的规则,使用basePackages来指定扫描的包,includeFilters和excludeFilters来配置包含或者排除的规则,与配置文件相似
两个示例
1 | //排除Controller注解标识的bean |
过滤的类型有以下几种
- ANNOTATION 按照注解,最常用
- ASSIGNABLE_TYPE 按照类型
- ASPECTJ 使用ASPECTJ表达式
- REGEX 使用正则表达式
- CUSTOM 使用自定义规则,实现TypeFilter接口
@Import
使用Import可以进行组件导入,对于第三包中的所需要用到的bean,没有必要每一个都使用@Bean来进行一个个的实例化,可以使用@Import来直接导入bean组件
@Import(要导入的组件名) bean的id默认为全类名
@Import(importSelector类) 实现importSelector接口,重写selectImports方法,返回值就是组件全类名的数组
1
String[] selectImports(AnnotationMetadata importingClassMetadata);
@Import(ImportBeanDefinitionRegistrar类) 实现ImportBeanDefinitionRegistrar接口,重写registerBeanDefinitions方法,自己使用registry进行注册某些bean
1
void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);
@Value
使用@Value可以为属性进行赋值
基本数值
1 |
|
Spel表达式
#{}
环境变量中的值(配置文件中的值)
${}
需要引入配置文件,使用@PropertySource
1 |
|
@EnableAspectJAutoProxy
在之前为了使@Aspect注解生效需要在配置文件中配置
<aop:aspectj-autoproxy/>
而该注解的作用就是使得@Aspect注解生效,开启基于注解的AOP模式,与上述配置功能相同
@EnableTransactionManagement
在之前为了使@Transaction注解生效,需要在配置文件中配置
<tx:annotation-driven transaction-manager=”transactionManager”/>
而是用该注解的作用就是使得@Transaction注解生效,与上述配置功能相同