国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Spring 后處理

今天用到了Spring 的后處理

或者說是“后置處理”


后處理是什么意思呢?


在Spring初始化容器內(nèi)的Bean之后 ,Spring的后處理給了你一個(gè)執(zhí)行代碼的機(jī)會(huì),來對(duì)

初始化好的Bean實(shí)例,進(jìn)一步的加強(qiáng),調(diào)整等...


我用到的是jbpm的例子:

jbpm中常用的服務(wù)有3個(gè)

 

private RepositoryService repositoryService;

private ExecutionService executionService;

private TaskService taskService;


分別通過 get 方法獲得


我的意思是想在Spring注入jbpm引擎的時(shí)候,就把3個(gè)服務(wù)給填充好

不必每一次都用get方法取得服務(wù),那樣太浪費(fèi)效率了(我寧愿犧牲點(diǎn)空間)


但是,如果你在構(gòu)造函數(shù)中把3個(gè)服務(wù)填充是用問題的

因?yàn)镾pring 實(shí)例化bean的順序是:

調(diào)用構(gòu)造函數(shù)(或者指定的構(gòu)造方法)——> 前處理 ——> 注入對(duì)象 ——> 后處理

所以在構(gòu)造函數(shù)中賦值給3個(gè)服務(wù)會(huì)有空指針錯(cuò)誤,

因?yàn)閖bpm的引擎還沒有注入進(jìn)來!

(也就是構(gòu)造函數(shù)的調(diào)用在注入對(duì)象之前)


但是如果不在構(gòu)造函數(shù)中賦值,那么我們就沒有機(jī)會(huì)賦值了

(除非你做靜態(tài)的)


所以,在這樣的情況下,后處理給我們帶來了這個(gè)執(zhí)行代碼的機(jī)會(huì)!


Spring 的后處理有2種

1. bean級(jí)別上的后處理

2. factory級(jí)別上的后處理


第一種是只對(duì)單個(gè)bean有作用,也就是這個(gè)后處理的觸發(fā),只有實(shí)例化該類bean的時(shí)候

是通過接口來實(shí)現(xiàn)的:

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

也就是那個(gè)bean需要實(shí)現(xiàn)一個(gè)接口

(如果是這個(gè)bean不是你自己的,比如SessionFactory那些,是別人的bean,你

就只能使用下一種方法)

完成函數(shù):

 

/**后處理方法*/

public void afterPropertiesSet() throws Exception {

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

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

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

}

我這里就是上面jbpm的后處理

this.processEngine 是Spring注入進(jìn)來的對(duì)象,在這里它已經(jīng)注入完成,已經(jīng)有值了


第二種是Spring容器級(jí)別的

也就是,它會(huì)對(duì)每一個(gè)Spring管理的bean實(shí)例化的時(shí)候進(jìn)行觸發(fā)

當(dāng)然,你可以使用 xxx instancesof XXXX 來判斷

只不過是麻煩點(diǎn)而已

這種方法是以一個(gè)Bean的形式給Spring

也就是注冊(cè)一個(gè)后處理bean,和普通bean是一樣的,但是需要多實(shí)現(xiàn)一個(gè)接口

BeanPostProcessor


當(dāng)你把實(shí)現(xiàn)了這個(gè)接口的Bean注冊(cè)給Spring的時(shí)候,Spring就會(huì)自動(dòng)判別,然后

把它當(dāng)做容器級(jí)別的后處理

需要填充方法:

 

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

  和

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


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


這種方法一般用于對(duì)所有bean或者大多數(shù)bean進(jìn)行統(tǒng)一后處理的時(shí)候使用

還用于處理,自己不能為bean加入接口的情況下使用(比如上面提到的SessionFactory)


打完,手工

 

 

 


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jbpm4.4 Api 示例
工作流Activiti的學(xué)習(xí)總結(jié)(四)Spring和Activiti的整合配置講解
activiti學(xué)習(xí)筆記2
解決ACTIVITI流程圖設(shè)置字體不生效的問題
CTO 說了,用錯(cuò)@Autowired 和@Resource 的人可以領(lǐng)盒飯了
依賴注入
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服