spring@Aspect不注入依赖项
我正在使用maven、spring和aspectj进行编译时编织 我的aspectj顾问如下所示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
@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配置,但我想这应该是可能的,这应该是现在更可取的方法