Spring通过接口代理能提高程序代码的灵活性,接口代理的四个步骤:
- 配置被代理的目标类
- 配置通知
- 配置通知的作用切入点
- 配置接口的代理对象(Spring默认为接口代理)
配置:
sayHello
com.zhiwei.target.TargetInter com.zhiwei.target.TargetInter01
beforAdvicePacket
目标对象:
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(); }}
结果: