通知(Advice):具体的横切逻辑,Spring中有四种Advice编程
Spring有两种实现AOP的方式:Java动态代理和Cglib。默认使用动态代理,当目标对象没有实现接口时,就会使用后者。
代理模式中存在目标对象和代理对象,它们必须实现相同的接口。用户直接使用代理对象,而代理对象会将用户的请求交给目标对象处理。代理对象能够对用户的请求增长额外的处理。函数
1.建立目标对象this
//目标对象接口 public interface Subject { public void doSomething(); } //目标对象实现 public class RealSubject implements Subject { public void doSomething() { System.out.println( "call doSomething()" ); } }
2.建立代理对象逻辑处理类spa
public class ProxyHandler implements InvocationHandler { private Object proxied; public ProxyHandler( Object proxied ) { this.proxied = proxied; } public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { //在转调具体目标对象以前,能够执行一些功能处理 //转调具体目标对象的方法 return method.invoke( proxied, args); //在转调具体目标对象以后,能够执行一些功能处理 } }
3.简单调用,建立代理对象代理
RealSubject real = new RealSubject(); Subject proxySubject = (Subject)Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class}, new ProxyHandler(real)); proxySubject.doSomething();