首页 文章

@EnableAspectJAutoProxy不起作用

提问于
浏览
8

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

以下作品(当然):

@Aspect
@Component
public class RequestMappingAspect {

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

但是,如果删除了 @Component 并添加了@EnableAspectJAutoProxy,则以下操作无效 .

@SpringBootApplication
@EnableSwagger2
@EnableAspectJAutoProxy
public class Application {

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

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

2 回答

  • 4

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

    @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 注释,这也正确地连接它们 . 可能这是一个毫无意义的答复,然而,它解释了我们如何解决问题 - 而不是问题的实际解决方案 . 如果您希望删除此内容,请与我们联系 .

  • 3

    你需要@EnableAspectJAutoProxy用于 spring 配置和@Aspect / @Component注释的组合

    @EnableAspectJAutoProxy与基于xml的<aop:aspectj-autoproxy>做同样的事情

相关问题