在Spring项目中使用AspectJ方面

时间:2019-05-26 16:30:18

标签: spring aspectj

我正在开发一个大型Spring Boot应用程序,并想引入一个apsect。因为我需要“ if()”切入点标识符,所以我需要的不仅仅是Spring AOP。但: -我没有将我的Aspect明确定义为Spring Aspect,但似乎是由Spring处理的 -如果我在“ .js”文件中定义了方面,那么编织者就找不到该方面。

我非常仔细地遵循了https://www.baeldung.com/aspectj中的说明。基本上,我为我的Maven项目使用一个运行时Weaver插件,并将该方面注册到“ aop.xml”文件中。

如何将我的人生人生与春天分开?

package myApp;

public aspect MyAspect {

    pointcut prepInFile() :
            execution(public void MySpringBootApp.execute());

    after(): MyMethod() {
        System.out.println("*** I am here ***");
    }

}
<aspectj>
    <aspects>
        <aspect name="myApp.MyAspect"/>
        <weaver options="-verbose -showWeaveInfo">
            <include within="myApp"/>
        </weaver>
    </aspects>
 </aspectj>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.10</version>
            <configuration>
                <argLine>
                    -javaagent:"${settings.localRepository}"/org/aspectj/
                    aspectjweaver/${aspectj.version}/
                    aspectjweaver-${aspectj.version}.jar
                </argLine>
                <useSystemClassLoader>true</useSystemClassLoader>
                <forkMode>always</forkMode>
            </configuration>
        </plugin>
    </plugins>
</build>

1 个答案:

答案 0 :(得分:0)

首先,AspectJ源文件不是JavaScript,即它们没有*.js文件扩展名,而是*.aj

然后,您需要执行Spring manual section of AspectJ中描述的内容,而不是@EnableAspectJAutoProxy(它会激活基于代理的Spring AOP)。按照section about load-time weaving中的说明使用@EnableLoadTimeWeaving

还请注意,AspectJ编译器需要编译本机语法AspectJ文件。为此,您要使用AspectJ Maven plugin