扫码阅读
手机扫码阅读

似懂非懂的 AspectJ

6 2024-11-27

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:似懂非懂的 AspectJ
文章来源:
江南一点雨
扫码关注公众号
Spring AOP 和 AspectJ 概念总结

关于代理

在Java设计模式中,代理模式可以分为静态代理和Spring AOP中的动态代理。静态代理类似于房屋中介的角色,是在编译时就确定的代理关系。动态代理则是在运行时对目标方法功能进行增强,分为编译时增强和运行时增强两种。

静态代理

通过一个房屋出租的代码示例,解释了静态代理的概念和实现方式。在此模式中,中介类代理了房东的出租行为,并在出租前后添加了发布广告和收取中介费的行为。

动态代理

动态代理不改变原类方法的基础上,增强目标方法功能。它分为编译时增强和运行时增强。编译时增强如AspectJ,是在编译阶段生成代理类。运行时增强如Spring AOP,是在内存中生成代理类。

编译时增强

AspectJ是一种编译时增强的工具,它在编译阶段就生成了代理类。使用AspectJ需要一个专门的编译器ajc。

运行时增强

运行时增强使用JDK动态代理或CGLIB动态代理在内存中生成代理类,是Spring AOP的常用实现方式。

AspectJ 和 Spring AOP

AspectJ是AOP实现的一种方式,通过编译时增强来实现。而Spring AOP使用AspectJ提供的注解,但不采用编译时增强,而是运行时增强。

AspectJ

在IDEA中使用AspectJ需要安装插件,并配置使用ajc编译器。通过案例演示了AspectJ如何在编译时增强方法。

Spring AOP

虽然Spring AOP使用AspectJ的注解,却主要采用运行时增强。JDK动态代理和CGLIB动态代理分别演示了运行时增强的实现。

JDK 动态代理

JDK动态代理需要被代理的对象实现接口,它通过Proxy类和InvocationHandler实现方法代理。

CGLIB 动态代理

CGLIB动态代理不需要接口,使用Enhancer类和MethodInterceptor实现类的方法代理。

小结

静态代理、编译时增强的动态代理和运行时增强的动态代理都有各自应用场景。AspectJ具有对static、final方法和类的支持,无需Spring容器管理,支持编译后增强等优势,但Spring AOP以其简单易用性在日常开发中使用更广泛。

想要了解更多内容?

查看原文:似懂非懂的 AspectJ
文章来源:
江南一点雨
扫码关注公众号