Spring - lookup-method使用示例

1、初始邏輯:首先,來看下面的示例,具體看註釋。
java


/**
* 假設這是一個表示能夠向目標發起鏈接的類
*/
publicclassConnectionExample {
publicvoidexecConnection() {
System.out.println("ConnectionExample:鏈接到谷歌!");
}
}


/**
* 這是一個管理鏈接的類
* @author Administrator
*
*/
publicclassConnManager {
/**
* 介紹:經過調用這個方法,能夠獲取一個鏈接對象,業務邏輯如方法體
* 說明:假設這是一箇舊系統中遺留的或者第三方插件中默認的業務邏輯,
*       整個類和方法你都不能更改或者更改太麻煩
*/
publicConnectionExample createConnection(){
returnnewConnectionExample();
}
}
<!-- 初始使用或者咱們引入Spring後的配置 -->
<beanid="connManager"class="com.rc.sp.lookup.ConnManager"/>


publiccla***un {
/**
* 經過ConnManager的createConnection()方法能夠得到初始的Connection,
*     調用其execConnection()方法發起初始的鏈接請求,原有流程完畢
*/
publicstaticvoidmain(String[] args) {
ApplicationContext context = newClassPathXmlApplicationContext(
"applicationContext.xml");
ConnManager manager = (ConnManager) context.getBean("connManager");
manager.createConnection().execConnection();
}
}

 運行結果:執行Run中的main()方法,控制檯輸出:ConnectionExample:鏈接到谷歌!spring


2、應用拓展:如今,假設須要對Connection作一個拓展,但願能夠鏈接到的目標是自定義的新目標,經過ConnectionExample的createConnection()獲取的固然也是拓展的Connection對象。拓展很容易,怎樣把這個拓展的Connection在調用createConnection()時取代默認業務邏輯產生的Connection對並返回,纔是lookup-method的重點。app


/**
* 針對默認的Connection拓展
*/
publicclassConnectionExtends extendsConnectionExample {
@Override
publicvoidexecConnection() {
System.out.println("ConnectionExtends:鏈接到百度!");
}
}


<!-- spring配置 -->
<beanid="connectionExtends"class="com.rc.sp.lookup.ConnectionExtends"/>
<beanid="connManager"class="com.rc.sp.lookup.ConnManager">
<!-- 忽略createConnection()方法中的具體業務邏輯,直接返回自定義的bean的對象,
可是該bean必須與忽略邏輯的方法返回值執行不衝突 -->
<lookup-methodname="createConnection"bean="connectionExtends"/>
</bean>


運行結果:再次執行Run中的main()方法,控制檯輸出:ConnectionExtends:鏈接到百度!ide

相關文章
相關標籤/搜索