spring @Aspect没有注入依赖项

时间:2011-01-24 18:33:32

标签: spring aop aspectj spring-aop

我正在使用maven,spring和aspectj进行编译时编织

我的aspectj顾问看起来像这样

@Aspect
public class LoggingInterceptor {
  private LogManager logManager;
  public void setLogManager(LogManager logManager) {
    this.logManager = logManager;
  }
  .....
} 

我的applicationContext.xml看起来像这样

<!--configures the AspectJ aspect and indicates which Spring context should be used when giving advice-->
<context:spring-configured />

<aop:aspectj-autoproxy/>

<!--<context:component-scan base-package="com.reverb" />-->

<bean id="loggingInterceptor" class="com.myapp.interceptor.LoggingInterceptor">
    <property name="logManager" ref="logManager" />
</bean>

logManager始终为null ....

2 个答案:

答案 0 :(得分:9)

我没有看到你的logManager被定义在任何地方。即使它是,@Aspect s也不会自动符合注射条件。事实上,你会遇到两个对象 - 一个是LoggingInterceptor类型的bean,另一个是实际处理AOP的方面。但方面不是豆。

为了完成这项工作,您需要为factory-method="aspectOf"定义<bean>See here了解更多信息。

答案 1 :(得分:0)

使用java配置,它将如下所示:

@Configuration
@EnableSpringConfigured
public class AspectConfig {
}

不要忘记:

  • 添加@Configurable注释

方面:

@Aspect
@Configurable
public class CounterAspect { 
    @Inject
    private CounterService counter;
    //...
} 
  • 'org.springframework:spring-aspects'添加为编译依赖项

  • 添加META-INF/aop.xml

内容:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>   
    <!-- add to debug: options="-showWeaveInfo -verbose -debug"-->
    <weaver>
        <include within="com..*"/>
    </weaver>    
    <aspects>
        <aspect name="com.your.package.CounterAspect"/>
    </aspects>    
</aspectj>
  • 启用类似-javaagent:/path-to-aspectj/aspectjweaver-1.8.10.jar
  • 之类的javaagent