一:按条件注册bean之@Conditional
- 简介
此注释使得只有在特定条件满足时才启用一些配置。 - 现在我们创建了配置类,并且在配置类里面创建了构建bean对象的方法
- 测试类
- 效果:
- 实例:现在我们要求根据一定的条件去创建不同名称的bean对象,例如:通过判断当前的操作
系统类型创建,如果是window系统就创建名称为lisi的person对象,如果是linux系统就创
建名称为zs的person对象。
a:创建两个实现了Condition接口的实现类(想要在@Conditional注解中使用下面的类就必须实现Condition接口)
b:配置类
c:测试类
d:效果
-
注意:@Conditional这个注解,不仅仅可以标注在方法上,还可以标注在类上,如果
标注在类上的话就表示,只有满足@Conditional这个注解的条件,这个类中的方法才会
生效。
a:现在我们将@Conditional注解放到配置类上,并且使用WindowCondition条件
运行测试类效果:
b:现在我们将@Conditional注解放到配置类上,并且使用LinuxCondition条件
运行测试类效果:
二:给容器中快速导入一个组件@Import
- 简介
⑴给容器中注册组件的两种方式
a:给自己写的类注册
包扫描+组件标注注解(@Controller/@Serivce/@Repository/@Component)
b:不是我们自己写的类,比如是我们导入的第三方包,在包里面的类没有加上上面的注解
使用@Import快速的给容器中导入一个组件,容器中就会自动注册这个组件,id默认全
类名。 - 实例:
a:首先我们创建一个Color类
b:配置类
c:测试类
d:效果
- 下面我们使用@Import注解导入Color类
效果:
三:组件之ImportSelector
- 简介
使用ImportSelector选择器,将会返回需要导入的组件的全类名数组。 - 实例
a:创建两个实体类blue,yellow
b:创建实现ImportSelector接口的实现类
c:配置类
d:测试类
e:效果
四:组件之ImportBeanDefinitionRegistrar
- 简介
可以利用ImportBeanDefinitionRegistrar进行手动注册bean对象到容器中去。
- 实例
a:创建实现了ImportBeanDefinitionRegistrar接口的实现类
b:配置类
c:运行测试类的效果
五:@Bean生命周期之初始化和销毁方法
- 简介
bean的生命周期指的是bean从创建到初始化到销毁的过程。并且bean的生命周期是由
容器来管理的。 - 单实例时候初始化和销毁的例子
a:创建实体类
b:创建配置类(默认单实例)
c:创建测试类
d:效果
- 那么在多实例的情况下呢?
a:我们将配置类加上多实例的配置
b:运行测试类效果
c:原因
因为多实例初始化容器的时候是不会创建bean对象的,只有在获取bean实例对象的时候它才会创建
bean对象,所以我们可以尝试获取我们需要创建的bean对象,就会调用初始化方法了。但是它是不会
调用销毁的方法的,因为容器不会管理这个多实例的bean的,容器只会帮助创建这个多实例bean,所以
容器不会调用销毁方法。如果需要销毁就必须手动自己调用。
d:在测试类中加上获取bean对象的方法
效果:
- 实现初始化和销毁的方法我们还可以通过实体bean实现InitializingBean(初始化接口)和
DisposableBean(销毁接口)去解决。
a:创建实体类
b:配置类
c:测试类
d:效果
- 初始化注解PostConstruct和PreDestroy
a:简介
@PostConstruct:在bean创建完成并且属性赋值完成之后,再执行初始化方法。
@PreDestroy:在容器销毁bean之前通知我们进行清理工作
b:创建实体
c:配置类
d:测试类
e:效果