我无法将属性注入LoggingAspect
课程。成像我有一个AspectJ类:
@Aspect
public class LoggingAspect {
private IBoc theBo;
/** getter and setter **/
}
这是BOC:
public interface IBoc {
}
public class BocImpl implements IBoc {
}
和BOC的Spring配置:
<beans ...>
<aop:aspectj-autoproxy/>
<bean id="theBoc" class="org.huahsin.BocImpl"/>
</beans>
在applicationContext.xml文件中,我以这种方式配置AspectJ:
<beans...>
<bean id="theLog" class="org.huahsin.LoggingAspect">
<property name="theBo" ref="theBoc"/>
</bean>
</beans>
我如何在theBo
课程中注入LoggingAspect
?
2012年10月17日更新
我在这里找到了一些线索。如果我删除<aop:aspectj-autoproxy>
,则类theBo
中的成员变量LoggingAspect
将不为空。如果我有那个代码,那么theBo将为null。
答案 0 :(得分:2)
通常Spring
负责创建和配置bean。但是,AspectJ
方面是由AspectJ
运行时创建的。您需要Spring
来配置AspectJ
已创建的方面。对于单例方面的最常见情况,例如上面的LoggingAspect
方面,AspectJ
定义了一个返回方面实例的aspectOf()
方法。您可以告诉Spring
使用aspectOf()
方法作为获取方面实例的工厂方法。
例如:
<beans>
<bean name="loggingAspect"
class="org.huahsin.LoggingAspect"
factory-method="aspectOf">
<property name="theBo" ref="theBoc"/>
</bean>
<bean id="theBoc" class="org.huahsin.BocImpl"/>
</beans>
<强>更新强>
在班级中定义工厂方法:
@Aspect
public class LoggingAspect {
private IBoc iBoc;
private static LoggingAspect instance = new LoggingAspect();
public static LoggingAspect aspectOf() {
return instance;
}
public void setiBoc(IBoc iBoc) {
this.iBoc = iBoc;
}
}