java - 编译/加载时间用 Spring 编织

标签 java aspectj spring-aop

docs解释一下,必须通过使用 <context:load-time-weaver/> 来启用 LTW xml指令或使用@EnableLoadTimeWeaving注解。然而,我两者都没有做过,但我仍然看到我的项目中的方面是正确编织的!

  1. 在这种情况下,我不认为它们是在编译时编织的(但它们是吗?),所以肯定是加载时编织?
  2. 即使是这样,它如何在加载期间自动选择编织方面?如果没有使用文档所说的上述方法之一打开这些方面,它们不应该保持未编织状态吗?
  3. 我的类路径中有 aspectj-weaver,但无论如何都不足以选择这两种编织类型,对吗?

最佳答案

Spring AOP 不依赖AspectJ 字节码编织。它只是从 AspectJ 项目中借用了用于定义方面的注解。它是一个单独实现的框架,使用运行时代理来实现方面。如果你有 <aop:aspectj-autoproxy />在您的应用程序上下文中,spring 使用代理来实现在容器中的 bean 上定义的受支持的方面。

代理只能实现实际AspectJ 系统全部功能的子集,基本上是包装方法的建议。由于其性质,代理具有以下限制:

  • 仅拦截外部调用(同时违反代理边界)
  • 拦截 public仅限成员(member)(private/protected 无法拦截)
  • 不知道本地电话(或使用 thissuper 的电话)

例如,如果您希望能够为字段提供建议,则需要启用 Native AspectJ 的使用.

关于java - 编译/加载时间用 Spring 编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472679/

相关文章:

java - spring和aspectj,非代理对象的拦截方法

java - 使用 secp256r1 曲线 (BouncyCaSTLe) 生成长度为 127 的签名的 ECDSA 签名

java - 方法实现的切入点

java - 数字格式异常 : For input string "\N" when reading from file

java - 如何使用 Apache Felix 在 OSGi 中实现 AOP

java - Spring 框架 : instantiation exception

Spring AOP : How to read path variable value from URI template in aspect?

java - 具有特定注释的类的所有方法的@AspectJ 切入点

java - 从txt文件中搜索特定字符(Java)

java - Spring Boot应用程序在没有路径的情况下将调用哪个方法