【问题标题】:Spring AOP vs Aspecj [duplicate]Spring AOP vs Aspectj [重复]
【发布时间】:2012-07-25 23:44:31
【问题描述】:
可能重复:
Spring AOP vs AspectJ
我正在阅读 spring 参考文档。就是这么写的
- 如果您需要字段访问和更新连接点,请考虑使用 AspectJ 等语言。
- 有些事情你不能用 Spring AOP 做,例如建议非常细粒度的对象(例如域对象),AspectJ 是使用它的最佳案例。
- 什么是 AspectJ 编译器或编织器?
我没有理解以上三点的含义,因此感到困惑。请用简单的例子详细说明。
【问题讨论】:
标签:
java
spring
aop
aspectj
spring-aop
【解决方案1】:
AFAIK Spring AOP 不支持 AspectJ 的所有功能,但仅支持有限的一组。
例如,Spring AOP 仅支持方法级别的切入点,因此如果您想要细粒度的控制(即字段级别),则需要原生使用 AspectJ。
【解决方案2】:
您的第一点只是传达了您只能在方法级别应用切入点,spring-aop 中没有实现字段拦截。
下一点告诉您不能在域对象(它们是简单的 pojo 实体)上添加建议,
最后是关于织入,织入是将Aspects以JavaBean的方式连接到spring XML文件中的对象中。或者简单地说,编织就是将新的字节码添加到您的 java 类中以使其可用于框架。
【解决方案3】:
还有更重要的区别 - AspectJ 可以在编译时注入 AOP 东西(例如,使用 aspectj maven 插件),根据 spring 的版本,spring AOP 只能在运行时使用 cglib 或 javasist。但是通常你还是更喜欢 spring AOP - 只是因为它更容易......