一、配置组件
- @Configuration
把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,
默认是类名首字母小写
其次就是取方法名称
最后优先取Bean注解的Value
- @ComponentScan
在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的context:component-scan
可以添加参数筛选需要注入bean的规则,includeFilters,自己写Filter,需要实现TypeFilter接口,重写里面的帅选规则即可,
重写方法参数含义:
metadataReader 当前正在操作类的信息
metadataReaderFactory:获取上下文中所有的信息
- @Scope
用于指定scope作用域的(用在类上)
prototype:原型,多例
singleton:单例
request:主要应用于web模块,同一次请求只创建一个实例
session:主要应用于web模块,同一个session只创建一个对象
- @Lazy
表示延迟初始化
默认是非延迟加载
延时加载,懒加载只针对单例Bean起作用
启动懒加载,默认容器启动时不创建对象,调用对象的的功能的时候才创建
-
@Conditional
ng4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册Bean
在Spring的Bean上使用,自定义实现Condition接口,根据需求重写matches方法, -
@Import
导入外部资源
快速给容器导入Bean的方式
直接参数导入
实现ImportSelector接口自定义规则
实现ImportBeanDefinitionRegistrar,获得BeanDefinitionRegistry手动直接往IoC容器中放
创建自己的FactoryBean,需实现FactoryBean<要创建的对象类>接口,并重写起方法,把需要注册的对象封装为FactoryBean,获取FactoryBean时,在类名称前面加上&符号
FactoryBean,创建Bean,将Bean放入IoC容器
BeanFactory,从容器中获取Bean
- 生命周期控制
@PostConstruct 用于指定初始化方法(用在方法上)
@PreDestory 用于指定销毁方法(用在方法上)
@DependsOn 定义Bean初始化以及销毁时的顺序
@Bean 配置参数,如:@Bean(initMethod = “你的初始化方法”,destroyMethod = “你的销毁方法”)
分别实现InitializingBean和DisposableBean接口,重写其方法
自己写一个类,实现BeanPostProcessor接口,覆盖父类的方法,放入自己的逻辑即可,更加强大,可以监控到所有Bean
二、赋值(自动装配)组件
- @Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
- @Service
用于标注业务组件
- @Controller
用于标注控制层组件
- @Repository
用于标注数据访问组件,即DAO组件
- @Value
普通数据类型赋值
支持基本类型
支持Spring的EL表达式,可结合@PropertySource使用
- @Autowired
默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用
- @PropertySource
读取配置文件赋值
- @Qualifier
如存在多个实例配合使用
优先级高于Autowired
- @Primary
自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
- @Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配
优先级更高,可以拿到更多的环境信息
三、织入组件
- ApplicationContextAware
可以通过这个上下文环境对象得到Spring容器中的Bean
- BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor实现了BeanFactoryPostProcessor接口,是Spring框架的BeanDefinitionRegistry的后处理器,用来注册额外的BeanDefinition
四、切面组件
- @EnableTransactionManagement
添加对事务管理的支持
- @Transactional
配置声明式事务信息