AOP 建议没有被执行

问题描述 投票:0回答:2

我在 spring 中使用 AspectJ AOP。我不是在使用 spring AOP,而是在 spring 中使用 AspectJ AOP。

我正在使用加载时间编织。我的建议没有得到执行。任何线索都会有很大帮助。

@Aspect
public class ProfilingAspect {

    @Around("methodsToBeProfiled()")
    public Object profile(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("Hello #################");
        return pjp.proceed();
    }

    @Pointcut("execution(public * com.core.search.domain.AIESearchDomainService.doSearch())")
    public void methodsToBeProfiled() {
    }
}

以下是我尝试运行建议的方法。

package com.core.search.domain;


public class AIESearchDomainService {

    public SearchResponse doSearch() {
        return null;
    }
}

我已经使用下面的注释启用了加载时间编织。

@EnableLoadTimeWeaving

我还指定了用于启用加载时间编织器的 java 代理,如下所示。

-javaagent:"pathTo/spring-instrument-5.3.25.jar"

我还创建了 aop.xml 并将其保存在 /resources/META-INF 文件夹中。

<aspectj>

    <weaver>
        <!-- only weave classes in our application-specific packages -->
        <include within="com.core.search.domain.*"/>
    </weaver>

    <aspects>
        <!-- weave in just this aspect -->
        <aspect name="package.for.ProfilingAspect"/>
    </aspects>

</aspectj>

代码没有错误,但我的建议没有得到执行。请帮忙。我相信编织正在发生,因为我能够看到以下日志。

[AppClassLoader@18b4aac2] warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified
spring gradle aspectj
2个回答
0
投票

我猜你忘了启用 aspectjWeaving 参数

@EnableLoadTimeWeaving(aspectjWeaving=ENABLED)

0
投票

不知何故,AOP 使用以下 aop.xml 文件。

<aspectj>

    <weaver>
        <!-- only weave classes in our application-specific packages -->
        <include name="package.for.ProfilingAspect"/>
        <include within="com.core.search.domain.*"/>
    </weaver>

    <aspects>
        <!-- weave in just this aspect -->
        <aspect name="package.for.ProfilingAspect"/>
    </aspects>

</aspectj>

只要在 weaver 标签中包含 Aspect 类就可以了,我还不明白是怎么做到的。

希望这有帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.