打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring 后处理

今天用到了Spring 的后处理

或者说是“后置处理”


后处理是什么意思呢?


在Spring初始化容器内的Bean之后 ,Spring的后处理给了你一个执行代码的机会,来对

初始化好的Bean实例,进一步的加强,调整等...


我用到的是jbpm的例子:

jbpm中常用的服务有3个

 

private RepositoryService repositoryService;

private ExecutionService executionService;

private TaskService taskService;


分别通过 get 方法获得


我的意思是想在Spring注入jbpm引擎的时候,就把3个服务给填充好

不必每一次都用get方法取得服务,那样太浪费效率了(我宁愿牺牲点空间)


但是,如果你在构造函数中把3个服务填充是用问题的

因为Spring 实例化bean的顺序是:

调用构造函数(或者指定的构造方法)——> 前处理 ——> 注入对象 ——> 后处理

所以在构造函数中赋值给3个服务会有空指针错误,

因为jbpm的引擎还没有注入进来!

(也就是构造函数的调用在注入对象之前)


但是如果不在构造函数中赋值,那么我们就没有机会赋值了

(除非你做静态的)


所以,在这样的情况下,后处理给我们带来了这个执行代码的机会!


Spring 的后处理有2种

1. bean级别上的后处理

2. factory级别上的后处理


第一种是只对单个bean有作用,也就是这个后处理的触发,只有实例化该类bean的时候

是通过接口来实现的:

接口为:org.springframework.beans.factory.InitializingBean

也就是那个bean需要实现一个接口

(如果是这个bean不是你自己的,比如SessionFactory那些,是别人的bean,你

就只能使用下一种方法)

完成函数:

 

/**后处理方法*/

public void afterPropertiesSet() throws Exception {

this.executionService = this.processEngine.getExecutionService();

this.taskService = this.processEngine.getTaskService();

this.repositoryService = this.processEngine.getRepositoryService();

}

我这里就是上面jbpm的后处理

this.processEngine 是Spring注入进来的对象,在这里它已经注入完成,已经有值了


第二种是Spring容器级别的

也就是,它会对每一个Spring管理的bean实例化的时候进行触发

当然,你可以使用 xxx instancesof XXXX 来判断

只不过是麻烦点而已

这种方法是以一个Bean的形式给Spring

也就是注册一个后处理bean,和普通bean是一样的,但是需要多实现一个接口

BeanPostProcessor


当你把实现了这个接口的Bean注册给Spring的时候,Spring就会自动判别,然后

把它当做容器级别的后处理

需要填充方法:

 

 public Object postProcessBeforeInitialization(Object bean , String
    beanName)throws BeansException

  和

public Object postProcessAfterInitialization(Object bean , String
    beanName)throws BeansException


具体我就不多做解释了,看方法名就知道做什么的了


这种方法一般用于对所有bean或者大多数bean进行统一后处理的时候使用

还用于处理,自己不能为bean加入接口的情况下使用(比如上面提到的SessionFactory)


打完,手工

 

 

 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
jbpm4.4 Api 示例
工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解
activiti学习笔记2
解决ACTIVITI流程图设置字体不生效的问题
CTO 说了,用错@Autowired 和@Resource 的人可以领盒饭了
依赖注入
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服