在Weblogic 10.3.5上启用AspectJ

时间:2014-03-21 09:04:59

标签: weblogic aspectj

我想将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>

1 个答案:

答案 0 :(得分:0)

您没有提供servlet代码。所以我猜这个方面是为了在“getName”实际执行时拦截。如果是这样,请使用“执行”而不是“呼叫”。