【问题标题】:How to enable <aop:aspectj-autoproxy> with java-based annotations如何使用基于 java 的注解启用 <aop:aspectj-autoproxy>
【发布时间】:2012-05-13 23:57:21
【问题描述】:

我正在尝试设置没有任何 XML 的 Spring AOP。 我想在一个类中启用&lt;aop:aspectj-autoproxy&gt;@Configuration注释。

这是在 XML 文件中定义的方式:

<aop:aspectj-autoproxy>
<aop:include name="msgHandlingAspect" />
</aop:aspectj-autoproxy>

我尝试用 @Configuration@EnableAspectJAutoProxy 注释我的班级 但什么也没发生。

【问题讨论】:

标签: java spring spring-aop


【解决方案1】:

您是否在同一个@Configuration 类中创建了一个方面bean? 以下是the docs 的建议:

 @Configuration
 @EnableAspectJAutoProxy
 public class AppConfig {
     @Bean
     public FooService fooService() {
         return new FooService();
     }

     @Bean // the Aspect itself must also be a Bean
     public MyAspect myAspect() {
         return new MyAspect();
     }
 }

【讨论】:

  • 是的,我在同一个 @Configuration 类中创建了一个方面 bean,如您的示例所示。但仍然没有任何反应。我现在在一个额外的 xml 文件中导入了 并通过 ImportResource 将其添加到我的配置类中。现在方面工作。但更好的方法是将配置放在同一个配置类中
  • 正是我想要的。甚至班级名称与我的相同:D
  • @Jaskey 被组件扫描拾取?
  • 记得添加 proxyTargetClass = true 否则如果你在控制器中使用@EnableAspectJAutoProxy(proxyTargetClass = true) 会出现意外错误
  • @FarukT 当你使用基于类的代理时。我更喜欢使用基于接口的代理。
【解决方案2】:

我使用了公认的答案解决方案,但我遇到了意想不到的问题,直到将此参数添加到配置中才明白。

@EnableAspectJAutoProxy(proxyTargetClass = true)

如果你在@Controller 中使用注解,你需要这样配置

请记住,如果您有 java 8,则需要使用高于 1.8.X 的 AspectJ 版本

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class AppConfig {

    @Bean
    public AccessLoggerAspect accessLoggerAspect() {
        return new AccessLoggerAspect();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2014-09-11
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多