Spring 3.1.2:未设置ApplicationEventPublisher

时间:2014-06-18 17:48:02

标签: java spring 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和will   自动调用setApplicationEventPublisher()。

但是当我运行它时它是空的。

任何想法为什么?

由于

2 个答案:

答案 0 :(得分: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)
}

您只需要确保通过组件扫描/配置/ <bean>标记将bean真正添加到上下文中,尝试将其注入另一个bean来检查它。

答案 1 :(得分:0)

您应该使用ApplicationContext的getBean方法获取MyClass的实例,而不是自己使用new关键字进行初始化。这样Spring Container可以设置ApplicationEventPublisher。