AI智能
改变未来

Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?

Spring AOP 是一种动态代理的模式 编译期间不会一起编译为classs文件 而是在运行期间 进行动态代理
动态代理:代理类实现invocationHandler接口 实现invoke方法 该方法有三个参数代理类对象 被代理类方法 被代理类方法参数
使用可通过 proxy.newproxyinstance(被代理类类加载器,被代理类接口,代理类处理器)

private Target target;public DynamicProxyHandler(Target target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(\"========before==========\");Object result = method.invoke(target,args);System.out.println(\"========after===========\");return result;}
Target target = new TargetImpl();DynamicProxyHandler handler = new DynamicProxyHandler(target);Target proxySubject = (Target) Proxy.newProxyInstance(TargetImpl.class.getClassLoader(),TargetImpl.class.getInterfaces(),handler);String result = proxySubject.execute();System.out.println(result);

AspectJ AOP 是一种静态代理 模式 静态代理指 在编译期间会把要代理类一起编译 那么代理类包含被代理类的信息 且会一起被编译为classs文件

private Target target;public ProxyTarget(Target target) {this.target = target;}public String excute() {System.out.println(\"ProxyTarget 静态代理类 start\");String result=((ProxyTarget) this.target).excute();System.out.println(\"ProxyTarget 静态代理类 end\");return result;}
public class TargetImpl implements target {public String excute() {System.out.println(\"TargetImpl 测试静态代理\");return \"test TargetImpl\";}}
public static void main(String[] args) {Target target=(Target) new TargetImpl();ProxyTarget proxyTarget=new ProxyTarget(target);String a=proxyTarget.excute();System.out.println(a);}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?