一、概述
- Introductions允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象
1.1、实例
1、自定义Plane类
package com.wry.bean;
public class Plane {
public void fly(){
System.out.println("plane flying");
}
}
2、定义接口Vehicle
package com.wry.bean;
public interface Vehicle {
public void drive();
}
3、接口实现类VehicleImpl
package com.wry.bean;
public class VehicleImpl implements Vehicle{
@Override
public void drive() {
System.out.println("vehicle driving");
}
}
4、xml配置
<bean id="plane" class="com.wry.bean.Plane"></bean>
<bean id="myAspect" class="com.wry.aspect.MyAspect"></bean>
<aop:config>
<aop:aspect id="myAspectAOP" ref="myAspect">
<aop:declare-parents types-matching="com.wry.bean.Plane(*)"
implement-interface="com.wry.bean.Vehicle"
default-impl="com.wry.bean.VehicleImpl"/>
</aop:aspect>
</aop:config>
5、测试
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
Vehicle vehicle = (Vehicle)context.getBean("plane");
vehicle.drive();
6、结果
vehicle driving
7、总结
- 在aop:declare-parents标签中,types-matching是Plane类,implement-interface是Vehicle接口,在测试类中获取Plane对象时,AOP将plane对象转化为vehicle对象,意思是给Plane类增加了一个父类Vehicle,上面“提供了一个接口实现类来代表这些对象”,即用Vehicle接口代表plane对象,给它增加一个父类才能转化。