我正在使用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 ....
答案 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