Bean种类

1.普通bean,最简单的bean,spring直接创建对象并返回

配置形式一般如下:

JavaBean类型 javabean的分类_JavaBean类型


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项目

测试单例

接口

JavaBean类型 javabean的分类_生命周期_02


实现类

JavaBean类型 javabean的分类_spring_03


配置

JavaBean类型 javabean的分类_JavaBean类型_04


写个测试类

JavaBean类型 javabean的分类_JavaBean类型_05


JavaBean类型 javabean的分类_测试类_06


测试原型(多例)

修改配置文件即可

JavaBean类型 javabean的分类_JavaBean类型_07


运行一次

JavaBean类型 javabean的分类_spring_08

生命周期

Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务
1.创建Bean实例

2.调用Bean的初始化方法

3.Bean可以使用了

4.当容器关闭时,调用Bean的销毁方法

写个测试类测试一下

接口

JavaBean类型 javabean的分类_生命周期_09


实现类

JavaBean类型 javabean的分类_spring_10


配置

JavaBean类型 javabean的分类_spring_11


测试类

JavaBean类型 javabean的分类_JavaBean类型_12


JavaBean类型 javabean的分类_spring_13


这里要注意一个小问题,这个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类的方法使用详情

JavaBean类型 javabean的分类_测试类_14


编写一个实现类

JavaBean类型 javabean的分类_spring_15


去配置文件配置这个类

JavaBean类型 javabean的分类_测试类_16


测试效果

JavaBean类型 javabean的分类_测试类_17


JavaBean类型 javabean的分类_测试类_18


观察结果可以延申出,假如我们在前置方法或者后置方法把传入的bean变成bean的代理对象,这样我们就可以做AOP操作,例如事务操作现在改造一下这个类,让它返回一个代理对象

JavaBean类型 javabean的分类_生命周期_19


JavaBean类型 javabean的分类_生命周期_20

这里最难理解就是这个动态代理,我会在java基础类那里写关于这个动态代理的知识点