2016-03-28 37 views
0

我試圖從appContext.getBeanDefinitionNames()中調用一組bean的操作。調用操作的順序對我來說很重要,因爲一個bean的操作依賴於其他操作。影響ApplicationContext.getBeanDefinitionNames()返回的順序的方法?

我試過以下設置這個順序。

1.PriorityOrdered interface 
[email protected] annotation 
3.BeansPostProcessor interface 

但他們沒有一個似乎影響列表中的順序。默認情況下,它按照它們在classpath中遇到的順序返回bean。

兩個問題。

1.上述方法設置bean初始化的順序是什麼意思?

2.能否以任何方式影響使用appContext.getBeanDefinitionNames()檢索bean名稱的順序?

回答

0

我從你的問題不明白什麼是你的問題。你是否想要改變初始化bean的順序,或者按照它們在配置中定義的順序來獲取bean的名稱?

1.上述方法設置初始化到bean的順序是什麼意思?

ApplicationContext負責實例化,配置和連線你的應用程序的bean。 ApplicationContext在其生命週期的早期階段讀取您的配置(XML,註釋,Java代碼配置等)並實例化這些bean。當我們談論初始化bean的順序時,我們指的是更早實例化哪個bean,並且稍後將實例化這些bean。例如,如果你有兩個類AB其中B取決於A象下面這樣:

class A { 
} 

class B { 

    private A a; 

    public B(A a) { 
     this.a = a; 
    } 

} 

正如你可以爲了實例B我們需要的A一個實例看。

DependsOn

豆上當前bean依賴。任何指定的bean都將保證在該bean之前由容器創建。 (DependsOn Documentation

的BeanPostProcessor

一個BeanPostProcessor允許你修改了它是由容器實例化後。我不認爲你可以用豆後期處理器達到你想要的。 Docs

PriorityOrdered

PriorityOrderedOrdered接口的擴展。從文檔:

Ordered是一個接口,可以通過應該 可訂購的對象實現,例如在集合中。實際訂單可以是 ,將其解釋爲優先級,第一個對象(具有最低的 訂單值)具有最高優先級。

請注意,此接口還有一個優先級標記: PriorityOrdered。由PriorityOrdered對象 表示的訂單值總是適用於由普通訂單對象表示的相同訂單值之前。

Ordered接口PriorityOrdered

分機的說明書,表示優先級順序:由PriorityOrdered對象表示 順序值之前平原有序對象表示 相同的順序值總是適用。這是主要用於特殊用途界面的 ,用於對象,其中 尤其重要的是首先識別優先對象,而不用 即使獲取其餘對象。一個典型的例子:優先 後處理器在春季ApplicationContext

另外我不認爲你也可以從這個接口實現你想要的。

2.能否以任何方式影響使用appContext.getBeanDefinitionNames()檢索bean名稱的順序?

getBeanDefinitionNames()方法僅返回一個包含當前工廠(Docs)定義的所有豆的名稱的字符串的數組。