在Weblogic 10.3.5上启用AspectJ

在Weblogic 10.3.5上启用AspectJ,weblogic,aspectj,Weblogic,Aspectj,我想将AspectJ实现到Weblogic ear模块中,以在开发阶段改变行为。这是我的设置: 1sample.ear类为sample.java的文件需要更改行为: public class Sample { public String getName() { return "Sample Name"; } } 并且有一个servlet类在init方法中调用这个类 1samplespect.jar文件,在META-INF中嵌入aop.xml public

我想将AspectJ实现到Weblogic ear模块中,以在开发阶段改变行为。这是我的设置:

  • 1
    sample.ear
    类为sample.java的文件需要更改行为:

    public class Sample {
        public String getName() {
            return "Sample Name";
        }
    }
    
并且有一个servlet类在init方法中调用这个类

  • 1
    samplespect.jar
    文件,在META-INF中嵌入aop.xml

    public aspect SampleAspect {
        pointcut getName() : call(* *.Sample.getName(..));
        String around() : getName() {
            return "Sample Name Aspect";
        }
    }
    
在Weblogic设置中,我将aspectjrt.jar和samplespect.jar设置为类路径
classpath=C:\aspectj\lib\aspectjrt.jar;C:\library\samplespect.jar;%类路径%

还要将
-javaagent:C:\aspectj\aspectjwearver.jar
放入java参数中

将sample.ear部署为Weblogic的一个模块

启动Weblogic server时,我在服务器的服务器日志中看到了此日志

[EventInfoClassLoader@302eb2b4] info register aspect SampleAspect
但是我检查servlet,它返回“Sample Name”,而不是方面中的名称

我做错了什么

更新:

我按照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>


您没有提供servlet代码。所以我猜aspect是在实际执行“getName”时拦截的。如果是这样,请使用“执行”而不是“调用”。

谢谢您的分享@Amir,我按照您的建议更改为
execution
,但仍然无法工作。