AOP:Aspect Oriented Programming,面向切面编程,通过预编译方式和动态代理实现程序功能的统一维护的一种技术。利用AOP对业务逻辑各个部分进行抽取隔离,从而使逻辑各部分间的耦合度降低,提高程序的可重用性,提高开发效率。
Target target = new Target(); //创建目标对象
//创建代理对象,Target implements TargetInterface TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("前置增强代码..."); Object invoke = method.invoke(target, args);//反射方法对象,即要执行的目标对象 System.out.println("后置增强代码..."); return invoke; } });
Target target = new Target(); //创建目标对象 Enhancer enhancer = new Enhancer(); //创建增强器 enhancer.setSuperclass(Target.class); //设置父类 enhancer.setCallback(new MethodInterceptor() { //设置回调 @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("前置代码增强...."); Object invoke = method.invoke(target, objects); System.out.println("后置代码增强...."); return invoke; } }); Target proxy = (Target) enhancer.create(); //创建代理对象
Target(目标对象) |
代理的目标对象 |
Proxy (代理) | 一个类被 AOP 织入增强后,就产生一个结果代理类 |
Joinpoint(连接点) | 那些可以被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 |
Pointcut(切入点) | 对哪些 Joinpoint 进行拦截的定义 |
Advice(通知/ 增强) | 拦截到 Joinpoint 之后所要做的事情就是通知 |
Aspect(切面) |
是切入点和通知(引介)的结合 |
Weaving(织入) | 把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入 |
原文:https://www.cnblogs.com/dwyer/p/11167718.html