簡體   English   中英

Spring 中的依賴注入如何在此語句中工作?

[英]How dependency injection in Spring is working in this statement?

我正在學習 Spring 中的依賴注入,我有以下代碼:

    @Autowired
    private CamelContext context;

    @Autowired
    private Environment environment;

    @Autowired
    protected CamelContext createCamelContext(){

        return context;
    }

    ...
}

我知道上下文和環境 bean 被注入到這個 class 中,但我不明白這段代碼到底注入了什么:

@Autowired
protected CamelContext createCamelContext(){

    return context;
}

我不明白這種注入。 這里到底發生了什么? 這個方法注入和這個沒有注入的簡單方法有什么區別:

protected CamelContext createCamelContext(){

    return context;
}

任何反饋將不勝感激! 謝謝!

在這種情況下,@ @Autowired幾乎等同於createCamelContext上的@Beancontext上的@Inject 如果您不提供@Qualifier ,則自動裝配 bean 按類型發生,因此您的代碼基本上將采用您的@Autowired/@Inject CamelContext context和 go 尋找CamelContext來填充缺失值,它將按照@Autowired/@Bean createCamelContext提供的方式找到@Autowired/@Bean createCamelContext

帶注釋的createCamelContext和未注釋的區別在於 Spring 在其 Bean 中沒有該方法,因此在尋找@Bean@Inject時找不到該方法。

在您的特定情況下,值context會尋找CamelContext ,並以createCamelContext的形式找到一個。 此時createCamelContext查找context的值,即null 它返回這個值,該值被注入到context 因此,在任何時間點,引用contextcreateCamelContext應該總是產生null

使用@Autowired的方法要么是setter 要么是config 方法。 它們在 bean 創建后調用,可用於初始化。 這些方法的所有arguments都會被Spring自動注入。 從 Spring javadoc

自動裝配方法

配置方法可以具有任意名稱和任意數量的 arguments; 每個 arguments 都將與 Spring 容器中的匹配 bean 自動裝配。 Bean 屬性設置方法實際上只是這種通用配置方法的一個特例。 這樣的配置方法不必是公開的。

但是在您的情況下, createCamelContext()沒有 arguments 並且也沒有初始化。 所以我看不出有任何理由聲明這個方法。

暫無
暫無

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

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