【问题标题】:Why server complaining about aspectOf is missing?为什么服务器抱怨 aspectOf 丢失?
【发布时间】:2012-10-17 08:00:44
【问题描述】:

我目前正在尝试在 AspectJ 中注入 Spring bean,如下所示,无论如何我的服务器(WAS Liberty Profile)一直抱怨缺少方法 aspectOf。请问我该如何解决这个问题?

application-context.xml

<aop:aspectj-autoproxy/>
<import resource="/context-file-A.xml"/>

上下文文件-A.xml

<bean id="loggingAspect" class="com.huahsin.LoggingAspect" factory-method="aspectOf">

JAVA 代码

@Aspect
public class LoggingAspect {
   ...
}

【问题讨论】:

  • 有aspectOf方法吗?您将其设置为工厂方法。
  • 根据文档,它不是必需的,因为它是由 Spring 内部创建的。

标签: java spring aop aspectj


【解决方案1】:

这是连接方面类时的常见错误。这意味着您的方面类,在本例中为 LoggingAspect 尚未转换为可以应用的方面。

使用AJDT Eclipse pluginMaven AspectJ compiler plugin 将您的类编织到一个方面的两种方法。

编织方面有 3 种方式:

  • 编译时编织:通过专用的 aspectj 编译器编译目标源或方面类;
  • 编译后编织:将方面指令注入已编译的类(可应用于 JAR 文件)
  • 加载时编织:在类加载期间将方面指令注入字节码,即加载检测类而不是“原始”类;

在一个方面类可以应用到一个类之前,它首先需要被“编织”到一个方面。

编织的aspect类将添加these static methods

【讨论】:

  • 我可以知道如何“编织”我的 LoggingAspect 类吗?我正在运行一个 Web 应用程序,而不是一个 JAVA 控制台,你能告诉我一些关于如何做到这一点的知识吗?
  • 您使用什么工具/插件来进行实际编织?这是(有关如何设置方面的相关指南)[denis-zhdanov.blogspot.ie/2009/08/weaving-with-aspectj.html]
【解决方案2】:

AspectJ 需要编织你的切面类和目标类。

编织你的方面类

编织目标类

  • 添加对这些方法的调用。

【讨论】:

    【解决方案3】:

    问题是您的 AspectJ 编织过程不起作用。因此,您在普通 Java 类而不是 AspectJ 类上调用 aspectOf 方法。

    一个简单的测试方法:

    1. 使用 Eclipse 插件 AJDT 之类的工具进行编织
    2. 使用 Spring 创建一个简单的 JUnit 测试。
    3. 终于让它在 WAS 中工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 2018-02-02
      • 1970-01-01
      • 2015-06-09
      • 2020-08-12
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多