#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.