Spring @EventListener注释不适用于@Service注释

时间:2016-05-13 10:49:22

标签: spring-mvc event-handling

以下是我想要接收的两个对象ContextRefreshedEvent

@Component
public class InitDB {

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent e) {
        //
    }
}

InitDB按预期工作,但在这种情况下不是:

@Service
public class MyService implements IMyService{

    @Autowired
    private MyDao _dao;             // Autowired WORKs

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent e) {
        // DON'T WORK
    }

    [...]

}

任何想法我做错了什么?

这是我的maven属性

<properties>
    <java-version>1.7</java-version>
    <org.springframework-version>4.2.2.RELEASE</org.springframework-version>
    <spring-security-web-version>3.2.5.RELEASE</spring-security-web-version>
    <org.aspectj-version>1.7.2</org.aspectj-version>
    <org.slf4j-version>1.5.10</org.slf4j-version>
    <hibernate-version>4.3.6.Final</hibernate-version>
    <json-jackson-version>2.4.1</json-jackson-version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <skipTests>true</skipTests>
</properties>

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,对我来说,事实证明我的监听器bean没有被Spring加载到依赖项中。

如果您使用Spring Boot Actuator,则可以在https://localhost:8443/beans检查已加载的bean。

Spring没有检测到bean,因为我有一个名称空间错误。我的主命名空间是 com.foo (包括com.foo.security和com.foo.controllers等包),当我添加新的包日志时,我在命名空间中引入了一个拼写错误:融为一体的˚F foo.logging

因此,Spring无法找到我正在添加的新组件/服务。

对于这个特定问题,如果用@Service注释它并不重要,因为@Service是@Component的子类(参见post