2016-05-13 35 views
1

這裏有兩個對象我想收到ContextRefreshedEvent春@EventListener標註沒有用@Service註釋工作

@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> 

回答

0

我有同樣的問題,對我來說,它證明了我的監聽器bean不是由春天的依賴加載。

如果您使用Spring Boot Actuator,您可以在https://localhost:8443/beans檢查加載的豆類。

Spring沒有檢測到bean,因爲我有一個命名空間錯字。我的主命名空間是com.foo(帶有像com.foo.security和com.foo.controllers這樣的軟件包),當我添加一個新的軟件包日誌時,我在命名空間中引入了一個錯字:com。 f foo.logging

因此,Spring找不到我添加的新組件/服務。

對於此特定問題,使用@Service註釋並不重要,因爲@Service是@Component的子類(請參閱post