@Aspect方面的Spring自动装配的Bean为空
我有以下spring配置:
<context:component-scan base-package="uk.co.mysite.googlecontactsync.aop"/><bean name="simpleEmailSender" class="uk.co.mysite.util.email.simple.SimpleEmailSenderImplementation"/>
<aop:aspectj-autoproxy/>
然后我有一个方面:
@Aspectpublic class SyncLoggingAspect {
@Autowired
private SimpleEmailSender simpleEmailSender
@AfterReturning(value="execution(* uk.co.mysite.datasync.polling.Poller+.doPoll())", returning="pusher")
public void afterPoll(Pusher pusher) {
simpleEmailSender.send(new PusherEmail(pusher));
}
}
此方面有效(我可以在afterPoll上达到断点),但是simpleEmailSender为null。不幸的是,我找不到清楚的文档说明为什么这样做。(作为记录,我的simpleEmailSender bean存在并且已正确连接到其他类中)以下几点使我感到困惑:
- 是context:component-scan应该是@Aspect吗?如果可以肯定的话,那将是一个弹簧管理的bean,那么自动装配应该可以工作吗?
- 如果context:component-scan不是用于创建方面,那么如何创建我的方面?我以为aop:aspectj-autoproxy只是创建一个beanPostProcessor来代理我的@Aspect类?如果不是Spring托管的bean,它将如何执行?
显然,你可以告诉我,我对一切应该如何工作一无所知。
回答:
方面是一个单例对象,在Spring容器外部创建。使用XML配置的解决方案是使用Spring的factory方法检索方面。
<bean id="syncLoggingAspect" class="uk.co.demo.SyncLoggingAspect" factory-method="aspectOf" />
使用此配置,该方面将被视为任何其他Spring bean,并且自动装配将正常工作。
你还必须在没有构造函数或在Spring容器外部创建的对象的Enum对象和其他对象上也使用工厂方法。
以上是 @Aspect方面的Spring自动装配的Bean为空 的全部内容, 来源链接: utcz.com/qa/429679.html