2014-07-19 30 views
1

我可以訪問bean定義以便聲明它們嗎?獲取bean定義以便定義它們

例如有以下XML bean定義:

<bean id="bean1" ... /> 
<bean id="bean2" ... /> 
<bean id="bean3" ... /> 

我需要以某種方式訪問​​BeanDefinition或這些豆類在它們在XML文件中聲明的順序。

+0

要實現與豆定義的順序是什麼? – Braj

+0

@Braj,我需要訪問重寫的bean。稍後在上下文中聲明一些具有相同「id」的bean,並隱藏先前聲明的bean。這是我需要訪問的bean。 –

回答

0

您可以使用任何XML解析器按順序定義所有的bean。

只需使用Element#getElementsByTagName()以文檔順序獲取給定標籤名稱的元素

示例代碼:(爲了使用dom bean的印刷類名)

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class SpringXMLParser { 

    public static void parse(String file) throws Exception { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = dbf.newDocumentBuilder(); 
     Document doc = docBuilder.parse(new FileInputStream(file)); 
     Element root = doc.getDocumentElement(); 
     NodeList nodeList = root.getElementsByTagName("bean"); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      System.out.println(((Node) nodeList.item(i)) 
             .getAttributes().getNamedItem("class")); 
     } 
    } 

} 
+0

可能存在複雜的xml文件結構(這些文件被某些第三方邏輯烘焙),因此它不是手動掃描它們的選項。 –

+0

你試過了嗎? – Braj

+0

爲什麼我會? Spring上下文由多個xml文件組合而成,這些文件由一些無法重用的代碼收集。我需要然後複製它。由於這些困難,這不是手動解析xmls的選項。 –

相關問題