Spring-AOP為類增加新的功能
適配器的簡單應用實現:
比如:有一個類Car,在類中有兩個屬性一個為汽車名name,另一個為速度speed。其行為為run()。
現在有一輛車BMWCar 增加了GPS功能。如下實現:
基本類:
public class Car{
private String name;
private double speed;
public void run()
}
新增功能:
public interface GPS{}
實現繼承基本類,再實現新增接口:
public class BMWCar extends Car implements GPS{}
利用Spring-AOP實現:
package com.springaop.test;
public interface Car{
public void run();
}
public class BMWCar implements Car{
public void run(){}
}
//新增功能
public interface GPS{
public void gpsLocation();
}
public class GPSCar implements GPS{
public void gpsLocation(){}
}
通過配置AOP,實現兩種功能的耦合:
<beans>
<bean id="car" class="com.springaop.test.Car"/>
<bean id="bmwcr" class="com.springaop.test.BMWCar"/>
<aop:config proxy-target-class="true">
<aop:aspect>
<aop:declare-parents
<!--- types-mathcing是之前原始的類 ->
types-matching
<!---implement-interface是想要添加的功能的接口 -->
implement-interface="com.springaop.test.GPS"
<!-- default-impl是新功能的默認的實現-->
default-impl="com.springaop.test.GPSCar"/>
</aop:aspect>
</aop:config>
</beans>
測試:
Car car = (Car)ctx.getBean("car");
car.run();
GPS gps = (GPS)ctx.getBean("car");
gps.gpsLocation();
Spring-AOP為類增加新的功能