我想将AspectJ实现到Weblogic ear模块中以改变开发阶段的行为。这是我的设置:
带有Sample.java类的1 sample.ear
文件需要更改行为:
public class Sample {
public String getName() {
return "Sample Name";
}
}
并有一个servlet类在init方法
中调用此类 1 sampleAspect.jar
个文件,其中aop.xml嵌入在META-INF
public aspect SampleAspect {
pointcut getName() : call(* *.Sample.getName(..));
String around() : getName() {
return "Sample Name Aspect";
}
}
在Weblogic设置中,我将aspectjrt.jar和sampleAspect.jar设置为类路径
classpath=C:\aspectj\lib\aspectjrt.jar;C:\library\sampleAspect.jar;%CLASSPATH%
还将-javaagent:C:\aspectj\aspectjwearver.jar
放入java参数
将sample.ear部署为Weblogic
的模块启动Weblogic服务器时,我在服务器的服务器日志中看到了这个日志
[EventInfoClassLoader@302eb2b4] info register aspect SampleAspect
但我检查了servlet,它返回"示例名称",而不是方面中的那个。
我做错了什么?
更新:
我按照Amir的建议改为execution(* *.Sample.getName(..))
,但问题仍然存在。
这是aop.xml文件的信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN"
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver options="-verbose" />
<aspects>
<aspect name="com.mycode.aspect.SampleAspect" />
</aspects>
</aspectj>
答案 0 :(得分:0)
您没有提供servlet代码。所以我猜这个方面是为了在“getName”实际执行时拦截。如果是这样,请使用“执行”而不是“呼叫”。