AspectJ与aop.xml

时间:2013-11-26 10:48:33

标签: java xml

我正在尝试通过LTW aop.xml文件定义一个继承的具体方面,但似乎没有 正在发生。

这是我的代码:

我的主要方法:

package example;    

public class Farm {

static Cat cat = new Cat();
static Cow cow = new Cow();
static Dog dog = new Dog();
static Fox fox = new Fox();

public static void main(String args[]){
    System.out.println(cat.talk(1));
    System.out.println(dog.talk(1));
    System.out.println(cow.talk(1));
    System.out.println(fox.talk(1));
}
}

Fox calss:

package example;

public class Fox extends Animal{

public String talk(int i) {
    return "DING DING!!!";
}
}

我的抽象方面:

package example;

public abstract aspect MyAspect {
protected abstract pointcut scope();

before() : scope() {
    System.out.println("Before");
}
}

我的aop.xml文件:

<aspectj>
    <aspects>
    <aspect name="example.MyAspect"/>
        <concrete-aspect
            name="example.MyConcreteAspect"
            extends="example.MyAspect"
        >
            <pointcut
                name="scope"
                expression="execution(public String example.Fox.talk(int))"
            />
        </concrete-aspect>
    </aspects>
</aspectj>

最后,我的输出:

MEW
WOOF
MOO
DING DING!!!

在“DING DING !!!”之前没有打印“之前”

任何想法我做错了什么? 我已经下载了一个实际的例子,一切似乎都是 在我的电脑上配置正常...

2 个答案:

答案 0 :(得分:3)

必须在运行配置中更改我的VM参数以指向aspectj-weaver.jar。 不管怎么说,还是要谢谢你。希望这会对任何人有所帮助。

答案 1 :(得分:0)

对于没有Spring的运行AOP,您需要从IDE配置VM参数-javaagent

使用maven,你可以像这样配置一个简单的junit:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <argLine>
                    -javaagent:${settings.localRepository}\org\aspectj\aspectjweaver\1.8.10\aspectjweaver-1.8.10.jar
                </argLine>
            </configuration>
        </plugin>
    </plugins>
</build>