Spring - lookup-method使用示例

襲冷發表於2014-04-01

一、初始邏輯

    來看下面的示例,具體看註釋。

/**
 * 假設這是一個表示可以向目標發起連線的類
 */
public class ConnectionExample {
	public void execConnection() {
		System.out.println("ConnectionExample:連線到谷歌!");
	}
}
/**
 * 這是一個管理連線的類
 */
public class ConnManager {
	/**
	 * 介紹:通過呼叫這個方法,可以獲取一個連線物件,業務邏輯如方法體 說明:假設這是一箇舊系統中遺留的或者第三方外掛中預設的業務邏輯,
	 * 整個類和方法你都不能更改或者更改太麻煩
	 */
	public ConnectionExample createConnection() {
		return new ConnectionExample();
	}
}
<!-- 初始使用,我們引入Spring後的配置 -->
<bean id="connManager" class="com.rc.sp.lookup.ConnManager"/>
public class Run {
	/**
	 * 通過ConnManager的createConnection()方法可以獲得初始的Connection,
	 * 呼叫其execConnection()方法發起初始的連線請求,原有流程完畢
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		ConnManager manager = (ConnManager) context.getBean("connManager");
		manager.createConnection().execConnection();
	}
}
    執行結果:執行Run中的main()方法,控制檯輸出:ConnectionExample:連線到谷歌!


二、應用擴充

    現在,假設需要對Connection做一個擴充,希望可以連線到的目標是自定義的新目標,通過ConnectionExample的createConnection()獲取的當然也是擴充的Connection物件。擴充很容易,怎樣把這個擴充的Connection在呼叫createConnection()時取代預設業務邏輯產生的Connection對並返回,才是lookup-method的重點。

/**
 * 針對預設的Connection擴充
 */
public class ConnectionExtends extends ConnectionExample {
	@Override
	public void execConnection() {
		System.out.println("ConnectionExtends:連線到百度!");
	}
}
<!-- spring配置 -->
<bean id="connectionExtends" class="com.rc.sp.lookup.ConnectionExtends"/>
<bean id="connManager" class="com.rc.sp.lookup.ConnManager">
	<!-- 忽略createConnection()方法中的具體業務邏輯,直接返回自定義的bean的物件,但是該bean必須與忽略邏輯的方法返回值執行不衝突 -->
	<lookup-method name="createConnection" bean="connectionExtends"/>
</bean>
    執行結果:再次執行Run中的main()方法,控制檯輸出:ConnectionExtends:連線到百度!



相關文章