Spring框架提供了很好的扩展性,除了能够与各类第三方框架良好整合外,其IOC容器也容许开发者进行扩展,这种扩展甚至无需实现BeanFactory或ApplicationContext接口,而是容许经过两个后处理器对IOC容器进行扩展。Spring提供了两种经常使用的后处理器:框架
名称 | 描述 |
Bean后处理器 | 这种后处理器会对容器中的Bean进行后处理,对Bean功能进行额外加强 |
容器后处理器 | 这种后处理器对IOC容器进行后处理,用于加强容器功能 |
Bean后处理器:工具
Bean后处理器是一种特殊的Bean,这种特殊Bean并不对外提供服务,它甚至能够无须id属性。它主要负责对容器中的其余Bean执行后处理,例如为容器中的目标Bean生成代理等,这种Bean被称为Bean后处理器。post
Bean后处理器会在Bean实例建立成功以后,对Bean实例进行进一步的加强处理。spa
Bean后处理器必须实现BeanPostProcessor接口:
代理
接口方法 | 描述 |
Object postProcessBeforeInitialization(Object bean,String name) throws BeansException | bean参数表示系统即将进行后处理的Bean实例,name参数是该Bean实例的名字 |
Object postProcessAfterInitialization(Object bean,String name) throws BeansException | bean参数表示系统即将进行后处理的Bean实例,name参数是该Bean实例的名字 |
实现该接口的Bean后处理器必须实现这两个方法,这两个方法会对容器中的Bean进行后处理。会在目标Bean初始化以前、初始化以后分别被回调,这两个方法用于对容器中的Bean实例进行加强处理。接口
Bean后处理器两个方法的回调时机:ci
BeanPostProcessor一般用来检查标记接口,或者作如将Bean包装成一个Proxy的事情,Spring的不少工具类,就是经过Bean后处理器完成的。开发
下面是Spring提供的两个经常使用的后处理器:
it
名称 | 描述 |
BeanNameAutoProxyCreator | 根据Bean实例的name属性,建立Bean实例的代理 |
DefaultAdvisorAutoProxyCreator | 根据提供的Advisor,对容器中全部的Bean实例建立代理 |
上面提供的两个Bean后处理器,都用于根据容器中配置的拦截器,建立代理Bean。代理Bean就是对目标Bean进行加强、在目标Bean的基础上进行修改获得的新Bean。io