通知(advice)是springAOP中重要的一个核心模块。
spring 通知分为方法调用之前方法 调用之后 或者任何区间。
-
BeforeAdvice
1 前置通知是在目标方法调用之前执行。
2 通过实现MethodBeforeAdvice来植入前置通知
3 MethodBeforeAdvice接口的主要代码:``` public interface MethodBeforeAdvice extends BeforeAdvice { void before(Method var1, Object[] var2, Object var3) throws Throwable; } ```
4 前置通知的demo
4.1 目标业务类
/** * 目标业务类 * Created by engle on 16-5-14. */ public class Target{ public void log() { System.out.println("日志信息"); } }
4.2 前置通知实现类
/** * 业务执行前的通知 * Created by engle on 16-5-14. */ public class BeforeMessage implements MethodBeforeAdvice{ @Override public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("在日志之前通知"); }
4.3 测试类
/** * 测试类 * Created by engle on 16-5-14. */ public class Test { public static void main(String[] args) { Target target = new Target(); BeforeAdvice before = new BeforeMessage(); AfterMessage after = new AfterMessage(); ProxyFactory factory = new ProxyFactory(); //设置代理工厂 factory.setTarget(log); //添加执行目标信息 factory.addAdvice(before); //添加执行前通知 Target proxy = (Target) factory.getProxy(); //获取代理对象 proxy.log(); } }
4.4 输出结果 ![这里写图片描述](http://img.blog.csdn.net/20160514121410510)
2 AfterReturningAdvice
- 后置通知是在目标方法调用之后执行。
- 通过实现AfterReturningAdvice来植入后置通知 。
- AfterReturningAdvice接口的主要代码:
public interface AfterReturningAdvice extends AfterAdvice {
void afterReturning(Object var1, Method var2, Object[] var3, Object var4) throws Throwable;
}
4.后置通知小demo(业务类和前置通知相同)
4.1 后置通知实现类
/**
* 业务执行前的通知
* Created by engle on 16-5-14.
*/
public class BeforeMessage implements MethodBeforeAdvice{
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("在日志之前通知");
}
}
4.2测试类
public class Test {
public static void main(String[] args) {
Target target = new Target();
BeforeAdvice before = new BeforeMessage();
AfterMessage after = new AfterMessage();
ProxyFactory factory = new ProxyFactory(); //设置代理工厂
factory.setTarget(log); //添加执行目标信息
factory.addAdvice(after); //添加执行后的通知
Target proxy = (Target) factory.getProxy(); //获取代理对象
proxy.log();
}
}
4.3结果:
日志信息
方法执行之后的通知
如果有问题可以私信或者留言给我