随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
下面用一个简单示例演示AOP的使用,在执行目标方法前执行日志输出。这也是AOP最重要的作用,分离与业务无关的代码。
创建Target类,是被代理的对象,有一个execute方法。
package com.home.web.manager;
public class Target {
public void execute(String name) {
System.out.println("执行execute方法:" + name);
}
}
创建通知类,可以拦截目标对象的execute方法。
package com.home.web.manager;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LoggerExecute implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
before();// 执行前置通知
invocation.proceed();
return null;
}
private void before() {
System.out.println("程序执行开始!");
}
}
程序入口,创建代理:
package com.home.web.manager;
import org.springframework.aop.framework.ProxyFactory;
public class Manager {
public static void main(String[] args) {
Target target = new Target();
ProxyFactory di = new ProxyFactory();
di.addAdvice(new LoggerExecute());
di.setTarget(target);
Target proxy = (Target) di.getProxy();
proxy.execute("AOP简单实现");
}
}
运行结果:
注意导入相关jar,尤其不要忘了cglib-nodep-3.1.jar