我可以訪問bean定義以便聲明它們嗎?獲取bean定義以便定義它們
例如有以下XML bean定義:
<bean id="bean1" ... />
<bean id="bean2" ... />
<bean id="bean3" ... />
我需要以某種方式訪問BeanDefinition
或這些豆類在它們在XML文件中聲明的順序。
我可以訪問bean定義以便聲明它們嗎?獲取bean定義以便定義它們
例如有以下XML bean定義:
<bean id="bean1" ... />
<bean id="bean2" ... />
<bean id="bean3" ... />
我需要以某種方式訪問BeanDefinition
或這些豆類在它們在XML文件中聲明的順序。
您可以使用任何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"));
}
}
}
可能存在複雜的xml文件結構(這些文件被某些第三方邏輯烘焙),因此它不是手動掃描它們的選項。 –
你試過了嗎? – Braj
爲什麼我會? Spring上下文由多個xml文件組合而成,這些文件由一些無法重用的代碼收集。我需要然後複製它。由於這些困難,這不是手動解析xmls的選項。 –
要實現與豆定義的順序是什麼? – Braj
@Braj,我需要訪問重寫的bean。稍後在上下文中聲明一些具有相同「id」的bean,並隱藏先前聲明的bean。這是我需要訪問的bean。 –