Весна 3.1.2: ApplicationEventPublisher не устанавливается

#java #spring #applicationcontext

#java #весна #applicationcontext

Вопрос:

У меня есть класс, определенный следующим образом:

 public class MyClass extends SimpleChannelInboundHandler<DataFrame<ByteBuf>> implements ApplicationEventPublisherAware
  

(SimpleChannelInboundHandler — это класс io.netty.)

Затем в моем XML-файле я определяю MyClass следующим образом:

 <bean id="MyClass" class="com.mypackage.MyClass" />
  

Согласно документации:

Во время настройки контейнер Spring обнаружит, что EmailService реализует ApplicationEventPublisherAware и автоматически вызовет setApplicationEventPublisher() .

Но при запуске это значение равно нулю.

Есть идеи, почему?

Спасибо

Комментарии:

1. что вы имеете в виду под «его нулевым значением»? вызывается ли метод с нулевым аргументом?

Ответ №1:

Общий шаблон использования для ApplicationEventPublisherAware выглядит следующим образом:

 package example;

import org.springframework.stereotype.*;
import org.springframework.context.*;

@Component
public class MyBean implements ApplicationEventPublisherAware {
  ApplicationEventPublisher applicationEventPublisher;

  public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
    System.out.println("publisher: "   applicationEventPublisher);
    this.applicationEventPublisher = applicationEventPublisher;
  }

  ... (use applicationEventPublisher in methods)
}
  

Вам просто нужно убедиться, что компонент действительно добавлен в контекст через component scan / configuration / <bean> tag, попробуйте внедрить его в другой компонент, чтобы проверить это.

Ответ №2:

Вы должны использовать метод getBean ApplicationContext для получения экземпляра MyClass вместо самостоятельной инициализации с использованием ключевого слова new . Чтобы контейнер Spring мог установить ApplicationEventPublisher.