簡體   English   中英

Spring3的@Configuration不能@Inject組件掃描的bean

[英]Spring3's @Configuration cannot @Inject component-scanned beans

這是我的app.xml:

<context:component-scan base-package="destiny.web" />
<context:annotation-config/>

並有一個Dao (接口),和DaoImpl (帶有加注解的@Repository )destiny.web封裝內。

還有另一個Spring3的destiny.web.AppConfig類:

@Configuration
public class AppConfig
{
  @Inject
  private Dao daoImpl

  public AppConfig()
  {
    System.out.println("dao = " + daoImpl);
  }
}

它打印'null',為什么?

我確信所有這些bean /配置/存儲庫都會被掃描。 但似乎@Configuration不知道其他掃描的bean。 我錯過了什么嗎?

我嘗試通過@ImportResource來解決它:

@Configuration
@ImportResource("classpath:app.xml")
public class AppConfig

但它似乎導致循環bean掃描並拋出此異常:

{main} org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
Offending resource: class path resource [app.xml]

怎么解決?

謝謝。

before inject / autowiring另一個組件before inject / autowiring Spring將invoke constructor firstly 因此,當您在構造函數中打印時,您的dao為null,因為dao still not injected yet

嘗試為您的configapp創建測試應用程序。

public class Main {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("stackoverflow.xml");

        AppConfig appConfig = context.getBean(AppConfig.class);
        appConfig.getConfig("smtp.host");
    }
}

你有沒有使用@Autowired注釋而不是@Inject嘗試它?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM