【Spring】- 介面代理、類代理
Spring通過介面代理能提高程式程式碼的靈活性,介面代理的四個步驟:
- 配置被代理的目標類
- 配置通知
- 配置通知的作用切入點
- 配置介面的代理物件(Spring預設為介面代理)
配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 配置目標物件 targetObject --> <bean id="targetObject" class="com.zhiwei.target.TargetObject"> <property name="name" value="name"/> </bean> <!-- 配置通知 --> <bean id="myAdvice" class="com.zhiwei.advice.MyAdvice"/> <!-- 配置通知的切入點: NameMatchMethodPointcutAdvisor:按照名稱匹配切入點(RegexpMethodPointcutAdvisor可以使用正則式匹配) mappedNames:通知作用的切入點:支援ant格式的表達:sys* 注意:一個通知匹配一個切入點通知器 --> <bean id="beforAdvicePacket" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="myAdvice"/> <property name="mappedNames"> <list> <value>sayHello</value> </list> </property> </bean> <!-- 配置代理物件: proxyInterfaces:代理介面集:目標物件實現的介面 target:被代理目標物件 interceptorNames:攔截器名稱集合 proxyTargetClass:是否開啟類代理 --> <bean id="proxyObject" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <!-- 被代理介面 --> <list> <value>com.zhiwei.target.TargetInter</value> <value>com.zhiwei.target.TargetInter01</value> </list> </property> <property name="target" ref="targetObject"/> <!-- 目標物件 --> <property name="interceptorNames"> <!-- 目標物件注入的通知 --> <list> <value>beforAdvicePacket</value> </list> </property> <property name="proxyTargetClass" value="true"/> </bean> </beans>
目標物件:
package com.zhiwei.target; public class TargetObject implements TargetInter ,TargetInter01{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void sayHello() { System.out.println("Hello "+name); } @Override public void sayBye() { System.out.println("Bye "+name); } }
目標物件實現介面:
package com.zhiwei.target;
public interface TargetInter01 {
public void sayBye();
}
package com.zhiwei.target;
public interface TargetInter {
public void sayHello();
}
測試類:
package com.zhiwei.target; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.zhiwei.target.TargetInter; import com.zhiwei.target.TargetInter01; import com.zhiwei.target.TargetObject; public class TestAOP { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("com/zhiwei/target/applicationContext.xml"); //使用IOC容器裡裡面的代理物件,預設介面代理 TargetInter ti=(TargetInter) ac.getBean("proxyObject"); System.out.println("預設介面代理"); ti.sayHello(); //因為是介面代理,介面指向同一個目標物件: TargetInter01 ti01=(TargetInter01) ac.getBean("proxyObject"); TargetInter01 ti01=(TargetInter01) ti; ti01.sayBye(); //IOC配置開啟類代理 TargetObject to=(TargetObject) ac.getBean("proxyObject"); System.out.println("\n\nIOC配置為類代理"); to.sayHello(); to.sayBye(); } }
結果:
相關推薦
【Spring】- 介面代理、類代理
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
【Python】例項方法、類方法、靜態方法之間區別(轉)
面相物件程式設計中,類方法和靜態方法是經常用到的兩個術語。 邏輯上講:類方法是隻能由類名呼叫;靜態方法可以由類名或物件名進行呼叫。 在C++中,靜態方法與類方法邏輯上是等價的,只有一個概念,不會混淆。 而在Python中,方法分為三類例項方法、類方法、靜態方法。程
【Spring】簡述@Configuration配置類註冊BeanDefinition到Spring容器的過程
概述 本文以SpringBoot應用為基礎,嘗試分析基於註解@Configuration的配置類是如何向Spring容器註冊BeanDefinition的過程 其中主要分析了 ConfigurationClassPostProcessor 這個BeanDefinitionRegistryPostProcess
原始碼分析 | 手寫mybait-spring核心功能(乾貨好文一次學會工廠bean、類代理、bean註冊的使用)
![](https://img2020.cnblogs.com/blog/2030202/202006/2030202-20200609215006431-1003784316.jpg) 作者:小傅哥 部落格:[https://bugstack.cn](https://bugstack.cn) - `彙總系
【Spring】AOP的代理預設是Jdk還是Cglib?
菜瓜:你覺得AOP是啥 水稻:我覺得吧,AOP是對OOP的補充。通常情況下,OOP程式碼專注功能的實現,所謂面向切面程式設計,大多數時候是對某一類物件的方法或者功能進行增強或者抽象 菜瓜:我看你這個理解就挺抽象的 水稻:舉個栗子
【Spring】16、註解事務 @Transactional
引用 相關 連接池 每次 one 作用 事務性 簡單 這一 概述 事務管理對於企業應用來說是至關重要的,即使出現異常情況,它也可以保證數據的一致性。Spring Framework對事務管理提供了一致的抽象,其特點如下: 為不同的事務API提供一致的編程模型,
【Spring】27、JPA 實現樂觀鎖@Version註解的使用
線程並發 基礎上 nal where 本質 項目需求 得到 業務 -s 持久層使用jpa時,默認提供了一個註解@Version來實現樂觀鎖 簡單來說就是用一個version字段來充當樂觀鎖的作用。先來設計實體類 /** * Created by xujingfeng on
013-Spring Boot web【二】靜態資源、Servlet、Filter、listenter
ces 其中 bean response cat 使用 修改配置 dac tostring 一、靜態資源 1.1、webapp默認支持靜態資源 在src/main/webapp下建立user.html默認支持訪問 1.2、默認內置靜態資源目錄。可被直接訪問 查看包:
【spring】spirng中的常用工具類
ren handle file 監控 拷貝 trac convert cas har 一、概述 很多時候,很多工具類其實spring中就已經提供,常用的工具類有: 參考:https://www.cnblogs.com/langtianya/p/3875103
【PHP面向物件】介面跟抽象類的區別和各自的用法
author:咔咔 wechat:fangkangfk 介面: 介面是用interface宣告的 介面中定義的方法都是公共的 介面只需要宣告自定義方法不需要具體內容 實現介面使用implements實現,介面支援多實現,使用逗號隔開即可 繼承介面的類
【CSS】純CSS另類思路代替display、visibility解決子選單延遲消失
在設計子選單時候,需要實現當滑鼠移動到選單時候,子選單顯示,否則子選單都處於隱藏狀態。實現這個功能使用js的話很簡單實現,但是我想用純CSS,使用純CSS的話,就會遇到滑鼠移開選單後,子選單就馬上消失了(display:noe或者visibility:hidden),就滑
【轉】Java設計模式之代理模式
代理模式是Java常見的設計模式之一。所謂代理模式是指客戶端並不直接呼叫實際的物件,而是通過呼叫代理,來間接的呼叫實際的物件。 代理模式的定義: 為其他物件提供一種代理,以控制對這個物件的訪問; 為其他物件提供一種代理以控制對這個物件的訪問。代理物件起到中介作用,可去掉功能
【Linux】時間日期、搜尋查詢、壓縮解壓類常用指令小結
一、時間日期類 1.date指令(顯示當前日期) 用法:date:(完整的顯示當前時間) date +%Y (顯示當前年份) &nb
【java核心36講】介面和抽象類的區別
回答 介面和抽象類是java面向物件設計的兩個基礎機制。 介面是對行為的抽象,他是抽象方法的集合,利用介面可以達到API定義和實現的分離。介面不能例項化/不能包含非常量成員,任何的feild都是預設public static final的意義;沒有非靜態方法的實現。 抽象
【譯】11. Java反射——動態代理
博主最近比較忙,爭取每週翻譯四篇。等不急的請移步原文網頁。 =====================================================================================
【C#】面對物件和類、構造方法及名稱空間
一、面向物件 1、什麼是面向物件? 面向物件是一種思想,面向物件是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節,在面向物件中,將資料作為第一位,而方法或者說是演算法作為其次,這是對資料的一種優化,操作起來更加方便,簡化了過程。 2、為什麼要用面向
【Hibernate】Hibernate的聚類查詢、分組查詢、排序與時間之差
在Hibernate中的HQL語句其實能夠基本能夠實現SQL語句所做的事情,正如jQuery至於javascript一樣。雖然HQL語句是對類的查詢,但是HQL在實行聚類查詢、分組查詢、排序與時間之差等查詢,也無須把查詢結果查詢出來,再通過對List的處理才得到結果。 比如
【Nginx】基於TCP的反向代理
Nginx預設只支援http的反向代理,想要支援tcp的反向代理,需要在編譯時增加tcp代理模組【nginx_tcp_proxy_module】 一、安裝步驟: cd /app wget htt
【Spring】@Resource、@Autowired和@Qualifer三者的區別
@Resource、@Autowired和@Qualifer三者的區別 Spring中以上三個註解可以用來實現依賴注入,但在使用時知道三者的區別與聯絡是比較重要的 @Resource使用注意事項 例: @Resource CityDa
Spring (AOP、靜態代理、動態代理)
1. AOP 1.1 AOP簡介 AOP Aspect Oriented Programing 面向切面程式設計 AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼(效能監視、事務管理、安全檢查、快取) Spring中的Aop是純J