Компонент Spring autowired для аспекта @Aspect имеет значение null

У меня есть следующая конфигурация 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. К сожалению, я не могу найти четкую документацию о том, почему это так. (Кстати, мой bean-компонент simpleEmailSender существует и правильно связан с другими классами) Меня смущают следующие вещи:

  1. Предполагается, что context:component-scan собирает @Aspect? Если это так, то наверняка это будет bean-компонент с пружинным управлением, поэтому автопроводка должна работать?
  2. Если context:component-scan не предназначен для создания аспектов, как создается мой аспект? Я думал, что aop:aspectj-autoproxy просто создает beanPostProcessor для проксирования моего класса @Aspect? Как это сделать, если это не управляемый bean-компонент Spring?

Очевидно, вы можете сказать, что я не понимаю, как все должно работать с нуля.

34
задан mogronalol 12 March 2012 в 09:12
поделиться