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 Boot實現的GraphQL示例Spring Boot
- Spring 文件 - 示例Spring
- Spring Cloud Netflix—示例在Ribbon中禁用Eureka使用SpringCloud
- Spring Cloud Gateway示例 | DevGlanSpringCloudGatewaydev
- Spring Boot與Kafka + kafdrop結合使用的簡單示例Spring BootKafka
- Nasruddin/elasticsearch-spring-boot-spring-data:使用Spring Data將Elasticsearch儲存庫與Springboot結合使用的入門示例ElasticsearchSpring Boot
- Spring中實現策略模式示例Spring模式
- WebService之Spring+CXF整合示例WebSpring
- Spring Security 表示式(Expressions) - hasRole示例SpringExpress
- JMeter使用示例JMeter
- Tcpdump使用示例TCP
- GPUImageRawDataInput 使用示例GPUUIAI
- rsync 使用示例
- 【Azure Redis 快取】示例使用 redisson-spring-boot-starter 連線/使用 Azure Redis 服務Redis快取Springboot
- Spring Boot Crud操作示例 | Java Code GeeksSpring BootJava
- springboot-rsocketbasicauth-example:在RSocket和Spring Boot中使用身份驗證的示例Spring Boot
- Spring Boo中事務感知快取示例Spring快取
- Spring Cloud Alibaba(12)---Gatway概述、簡單示例SpringCloud
- rapidjson常見使用示例APIJSON
- react-ace使用示例React
- nginx 使用webrman配置示例NginxWeb
- Jmeter (5.6.3) Windows 使用示例JMeterWindows
- 一個用 spring boot, 使用 pem 檔案連線 AWS 的 DocumentDB 的詳細示例Spring Boot
- Spring 註解學習 詳細程式碼示例Spring
- Spring @Conditional註解 詳細講解及示例Spring
- spring cloud分散式微服務-配置中心git示例SpringCloud分散式微服務Git
- Spring Data MongoDB 操作 document DB 的詳細示例SpringMongoDB
- Guava RateLimiter限流器使用示例GuavaMIT
- xrender中的FormRender使用示例ORM
- react-md-editor使用示例React
- 8個Date命令使用示例
- Comparator.comparing排序使用示例排序
- Vue中async await的使用示例VueAI
- netcat 命令介紹及使用示例
- 4.3.4.2 使用OMF 件建立CDB:示例
- Java使用ObjectMapper的簡單示例JavaObjectAPP
- sed命令簡單使用示例分享
- Ansible Jinja2 使用及示例