spring@Aspect不注入依赖项

spring@Aspect不注入依赖项,spring,aop,aspectj,spring-aop,Spring,Aop,Aspectj,Spring Aop,我正在使用maven、spring和aspectj进行编译时编织 我的aspectj顾问如下所示 @Aspect public class LoggingInterceptor { private LogManager logManager; public void setLogManager(LogManager logManager) { this.logManager = logManager; } ..... } <!--configures the A

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

我的aspectj顾问如下所示

@Aspect
public class LoggingInterceptor {
  private LogManager logManager;
  public void setLogManager(LogManager logManager) {
    this.logManager = logManager;
  }
  .....
} 
<!--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>
我的applicationContext.xml如下所示

@Aspect
public class LoggingInterceptor {
  private LogManager logManager;
  public void setLogManager(LogManager logManager) {
    this.logManager = logManager;
  }
  .....
} 
<!--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>


日志管理器总是空的…

我看不到您的
日志管理器在任何地方都被定义。即使是,
@Aspect
s也不会自动符合注入条件。实际上,您有两个对象—一个是类型为
LoggingInterceptor
的bean,另一个是方面,它实际处理AOP。但是相位不是一个豆子


为了实现这一点,您需要为您的
定义
工厂方法=“aspectOf”
。有关更多信息。

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

@Configuration
@EnableSpringConfigured
public class AspectConfig {
}
别忘了:

  • 添加
    @可配置的
    注释
在这方面:

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

  • 添加
    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:/aspectj/aspectjweaver-1.8.10.jar的路径启用javaagent

我有logManager,只是我没有写在这里。我将使用工厂方法进行测试…感谢sadding factory method=“aspectOf”修复了这一问题problem@Bozho“请看这里”链接过期?@Bozho-您知道使用JavaConfig的等效配置是什么吗?我还没有用过java配置,但我想这应该是可能的,这应该是现在更可取的方法