@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/>

然后我有一个方面:

@Aspect

public 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存在并且已正确连接到其他类中)以下几点使我感到困惑:

  1. 是context:component-scan应该是@Aspect吗?如果可以肯定的话,那将是一个弹簧管理的bean,那么自动装配应该可以工作吗?
  2. 如果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

回到顶部