@EnableAspectJAutoProxy不起作用

2022-09-04 03:32:13

我正在使用Spring Boot,我想使用AspectJ。

以下作品(当然):

@Aspect
@Component
public class RequestMappingAspect {

    @Before("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
    public void advice(JoinPoint joinPoint) {
        ...
    }
}

但是,如果删除并添加了@EnableAspectJAutoProxy,则以下操作不起作用。@Component

@SpringBootApplication
@EnableSwagger2
@EnableAspectJAutoProxy
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

如何正确启用AspectJ自动代理?


答案 1

想知道同样的事情,我们最终做了类似这样的事情:

@EnableAspectJAutoProxy(proxyTargetClass = true)
@Configuration("Main applicationContext")
@ComponentScan(
    basePackages = {"com.where.ever"},
    excludeFilters = {@ComponentScan.Filter(Aspect.class)})
public class ApplicationConfiguration {
    @Bean(autowire = Autowire.BY_TYPE)
    public SomeAspect someAspect() {
        return Aspects.aspectOf(SomeAspect.class);
    }
    ...
    ...
}

这使我们能够在方面上添加注释,这也使它们正确连接。也许这是一个毫无意义的回答,但是,它解释了我们如何解决问题 - 而不是问题的实际解决方案。如果您要删除它,请告诉我。@Aspect


答案 2

您需要弹簧配置的@EnableAspectJAutoProxy和@Aspect/@Component注释的组合

@EnableAspectJAutoProxy执行与基于 xml <aop:aspectj-autoproxy)相同的操作>


推荐