Spring - lookup-method使用示例
一、初始邏輯
來看下面的示例,具體看註釋。
/**
* 假設這是一個表示可以向目標發起連線的類
*/
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:連線到百度!
相關文章
- 10 lookup-method標籤使用
- spring security之httpSecurity使用示例SpringHTTP
- 使用Spring Boot實現的GraphQL示例Spring Boot
- Spring-test 單元測試使用示例Spring
- Spring 文件 - 示例Spring
- Spring - constructor-arg和property的使用示例SpringStruct
- Spring MVC 完整示例SpringMVC
- 8、使用 Spring Boot 搭建的一個 Spring MVC 示例(持續更新中)Spring BootMVC
- Spring Cloud Gateway示例 | DevGlanSpringCloudGatewaydev
- Spring Boot與Kafka + kafdrop結合使用的簡單示例Spring BootKafka
- Spring Cloud Netflix—示例在Ribbon中禁用Eureka使用SpringCloud
- GPUImageRawDataInput 使用示例GPUUIAI
- JMeter使用示例JMeter
- Tcpdump使用示例TCP
- rsync 使用示例
- javaJedis使用示例Java
- WebService之Spring+CXF整合示例WebSpring
- Spring Security 表示式(Expressions) - hasRole示例SpringExpress
- Spring中實現策略模式示例Spring模式
- Nasruddin/elasticsearch-spring-boot-spring-data:使用Spring Data將Elasticsearch儲存庫與Springboot結合使用的入門示例ElasticsearchSpring Boot
- 【Azure Redis 快取】示例使用 redisson-spring-boot-starter 連線/使用 Azure Redis 服務Redis快取Springboot
- dataview 元件使用示例View元件
- 索引器使用示例索引
- FileSystemWatch使用示例
- Spring Boot Crud操作示例 | Java Code GeeksSpring BootJava
- Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增刪改查示例Spring Boot
- Matlab 使用caffe示例Matlab
- Oracle expdp/impdp 使用示例Oracle
- nginx 使用webrman配置示例NginxWeb
- react-ace使用示例React
- Jmeter (5.6.3) Windows 使用示例JMeterWindows
- Spring MVC詳細示例實戰教程【轉】SpringMVC
- springboot-rsocketbasicauth-example:在RSocket和Spring Boot中使用身份驗證的示例Spring Boot
- 一個用 spring boot, 使用 pem 檔案連線 AWS 的 DocumentDB 的詳細示例Spring Boot
- Spring 註解學習 詳細程式碼示例Spring
- spring cloud分散式微服務-配置中心git示例SpringCloud分散式微服務Git
- Spring Cloud Alibaba(12)---Gatway概述、簡單示例SpringCloud
- Java-Spring-WebService最基礎的配置示例JavaSpringWeb