Spring 面向切面 代理
阿新 • • 發佈:2018-12-10
Aop(Aspect Oriented Programming), 即面向切面程式設計,可以說是OOP的補充和完善,與OOP有些區別,
AOP技術恰恰相反,它利用一種稱為"橫面"的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用的模板,並將其命名為"Aspect",即切面,所謂"切面",簡單說就是那些與業務無關,卻為業務模板所公共呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模板之間的耦合度,並有利於未來的可操作性和可維護性。
給大家簡單介紹一下一種模式:代理模式,分別在java,spring 中
Java中的靜態代理模式:
實現步驟:
1 建立一個介面
package com.zking.proxy;
public interface Istr {
public void sing();
}
2建立類實現介面
package com.zking.proxy;
/*
* 明星類
*/
public class Lyf implements Istr{
@Override
public void sing() {
System.out.println("這就是灌籃!");
}
}
3建立代理類實現介面(構造方法中要求傳入介面作為引數)
package com.zking.proxy; /** * * @author 助理類 * */ public class zxj implements Istr{ private Istr istr; public zxj(Istr istr) { super(); this.istr = istr; } @Override public void sing() { istr.sing(); } }
4測試類呼叫代理類進行測試
package com.zking.proxy;
public class Temp {
public static void main(String[] args) {
// Istr lyf=new Lyf();
// zxj n=new zxj(lyf);
// n.sing();
// Istr fz=new FZ();
// zxj n1=new zxj(fz);
// n1.sing();
}
}
舉一個列子:明星,助理,具體明星,就是明星是一個介面,一個抽象類,助理去實現代理,讓某個具體明星實現代理的東西,
Spring 中的動態代理模式:
1建立一個介面
package com.zking.proxy3;
public interface Iperson {
//睡覺的方法
public void sleep();
//add的方法
public void personAdd();
}
2實現介面的類 XIaoMing類
package com.zking.proxy3;
public class XiaoMing implements Iperson{
@Override
public void sleep() {
System.out.println("睡覺");
}
@Override
public void personAdd() {
System.out.println("add");
}
}
3 在applicationContext.xml裡面寫配置檔案
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<!-- 配置一個目標 -->
<bean id="xm" class="com.zking.proxy3.XiaoMing"></bean>
<!-- 配置一個混合的代理 -->
<bean id="myproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 引入目標 -->
<property name="target" ref="xm"></property>
<!-- 代理類的介面 -->
<property name="proxyInterfaces">
<list>
<value>com.zking.proxy3.Iperson</value>
</list>
</property>
</bean>
</beans>
4測試類
package com.zking.proxy3;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Temp3 {
@Test
public void SpringBean() {
ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");
Iperson ip=(Iperson) ac.getBean("myproxy");
ip.sleep();
//ip.personAdd();
}
}