我正在尝试通过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 !!!”之前没有打印“之前”
任何想法我做错了什么? 我已经下载了一个实际的例子,一切似乎都是 在我的电脑上配置正常...
答案 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>