AspectJ与weblogic

AspectJ与weblogic,weblogic,aop,aspectj,aspect,pointcut,Weblogic,Aop,Aspectj,Aspect,Pointcut,我正在尝试使用LTW在Weblogic上运行AspectJ。我的切入点是针对公共构造函数和方法,建议是针对之前、之后和之后。当我访问一个简单的“Hello World”jsp时,我遇到以下错误: 这是我的aop.xml文件: 这是我的方面文件: package foo.aspect; @面貌 公共类默认方面{ @切入点(“执行(public*.new(..)&&&&!在(foo.aspect.*)内)” 公共无效点新建(连接点此连接点){ } @之后(“pointCutNew(thisJoi

我正在尝试使用LTW在Weblogic上运行AspectJ。我的切入点是针对公共构造函数和方法,建议是针对之前、之后和之后。当我访问一个简单的“Hello World”jsp时,我遇到以下错误:

这是我的aop.xml文件:


这是我的方面文件:

package foo.aspect;
@面貌
公共类默认方面{
@切入点(“执行(public*.new(..)&&&&!在(foo.aspect.*)内)”
公共无效点新建(连接点此连接点){
}
@之后(“pointCutNew(thisJoinPoint)”)
新的公共无效通知(JoinPoint thisJoinPoint){
}
//其他建议和切入点的类似模式(用于方法)
}
这个方面被编译(使用普通的javac编译器)到foo.jar中

我通过添加以下内容来运行Weblogic:

java -javaagent:<path_to aspectweaver.jar> -Xbootclasspath/p:<path to {foo.jar, aspectweaver.jar}>
java-javaagent:-Xbootclasspath/p:
我认为这很可能是类路径/类加载器问题,因为AspectJ无法在DefaultAspect类中创建“aspectOf()”方法


请帮忙

您是否也尝试将aspectjrt.jar添加到类路径?实际上,它应该是aspectweaver.jar的一个子集,并且不是必需的,但是您可能还是想试试它

更新:Hm,可能问题在于您将方面放在引导类路径而不是普通类路径上,甚至在它之前,也就是说,您让它首先被找到,甚至可能在Java代理之前。也许你想改变这一点


因为我不是应用服务器用户,尤其不是Weblogic专家,所以您可能需要咨询示例配置。

找到了答案。请注意,这仅适用于LTW(加载时编织)

从编织角度来看,主要有4个关键组件:

  • 要编织的目标类: 所有您想要在其上显示方面的内容都应该在类路径中。对于一个典型的应用程序,它们将在您的应用程序WEB-INF/lib或WEB-INF/classes中,所以就让它们在那里吧。这里没有变化

  • AOP.xml: 这被编织者用来发现方面和编织者配置。这也应该在类路径中可用。您可以将其放在/lib文件夹中的JAR中,以便其配置可用于所有应用程序(EAR和WAR)

  • 方面类: 如果对方面类使用注释,那么“它也需要编织”。AspectJ weaver向这个类添加了一些特殊的方法(比如aspectOf)。因此,它必须在类路径中可用。这可以是与(2)相同的JAR的一部分。如果您已经使用ajc(aspectJ编译器)编译了这个文件,那么它也可以放在bootclasspath中(但与lib文件夹相比没有真正的优势)

  • 注意:因为这个类需要编织,所以它必须出现在AOP.xml中的标记中,而不是你想显示的类/包列表中

  • weaver本身(在aspectjweaver.jar中):这应该可以通过java代理获得,因此在/bin/setDomainEnv.cmd中添加以下行

    设置JAVA\u选项=%JAVA\u选项%-javaagent:%ASPECT\u HOME%\lib\aspectjweaver.jar 如果使用setDomainEnv.sh,还需要导出JAVA_选项

  • 因此,对于LTW来说,确实不需要

    • 摆弄bootclasspath(就像我一样)
    • 任何类路径中的aspectjrt.jar
    java -javaagent:<path_to aspectweaver.jar> -Xbootclasspath/p:<path to {foo.jar, aspectweaver.jar}>