Bean种类
1.普通bean,最简单的bean,spring直接创建对象并返回
配置形式一般如下:
2.FactoryBean,一个特殊的bean,它具有工厂的能力,即能生成bean,但是是特殊的bean
使用方式
bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。
3.FactoryBean和BeanFactory的区别
BeanFactory:工厂,用于生成任意bean。
FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂bean用于生产代理,并获得代理对象实例,例如AOP的使用
作用域
1.singleton:单例,再springIOC容器中只存在一个bean实例,这是一个默认值
2.prototype:原型,多例,每次从容器中都将获得一个新的bean
3.request,请求,每次http请求都会创建一个新的bean,但只适用于wab项目
4.session,会话,同一个http session共享一个bean,但只适用于wab项目
测试单例
接口
实现类
配置
写个测试类
测试原型(多例)
修改配置文件即可
运行一次
生命周期
Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。
1.创建Bean实例
2.调用Bean的初始化方法
3.Bean可以使用了
4.当容器关闭时,调用Bean的销毁方法
写个测试类测试一下
接口
实现类
配置
测试类
这里要注意一个小问题,这个bean必须是单例的,这样才能执行销毁方法
关于Bean的后置处理器
这是spring 提供一种机制,只要实现接口BeanPostProcessor,并将实现类提供给spring容器,它就会自动执行
添加Bean后置处理器后,SpringIOC容器对Bean的生命周期管理的过程为:
1.创建 Bean 实例
2.将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
3.调用 Bean 的初始化方法
4.将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
5.Bean 可以使用了
6.当容器关闭时, 调用 Bean 的销毁方法
先去看一SpringAPI关于这个BeanPostProcessor类的方法使用详情
编写一个实现类
去配置文件配置这个类
测试效果
观察结果可以延申出,假如我们在前置方法或者后置方法把传入的bean变成bean的代理对象,这样我们就可以做AOP操作,例如事务操作现在改造一下这个类,让它返回一个代理对象
这里最难理解就是这个动态代理,我会在java基础类那里写关于这个动态代理的知识点