Spring ioc xml 实例化bean 自己实现
作者:互联网
public class DefClassPathXmlApplicationContext { private String xmlPath; public DefClassPathXmlApplicationContext(String xmlPath) { this.xmlPath = xmlPath; } public Object getBean(String beanId) throws Exception { if (StringUtils.isEmpty(xmlPath)) { throw new Exception("xmlPath is null"); } // 获取xml 元素 List<Element> elements = readElementsFromXml(xmlPath); // 获取xml id 对应的class String clazzStr = findClassByBeanId(elements, beanId); if (StringUtils.isEmpty(clazzStr)) { throw new Exception("clazzStr 不存在"); } Class<?> clazz = Class.forName(clazzStr); Constructor<?> constructor = clazz.getDeclaredConstructor(); constructor.setAccessible(true); Object newInstance = constructor.newInstance(); return newInstance; } private String findClassByBeanId(List<Element> elements, String beanId) { for (Element element : elements) { if (element.attributeValue("id") != null && element.attributeValue("id").equals(beanId)) { return element.attributeValue("class"); } } return ""; } private List<Element> readElementsFromXml(String xmlPath2) throws DocumentException { SAXReader saxReader = new SAXReader(); // this.getClass().getClassLoader().getResourceAsStream(xmlPath) // 就是从src/main/resource 下读取 InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(xmlPath); Document read = saxReader.read(resourceAsStream); Element rootElement = read.getRootElement(); List<Element> elements = rootElement.elements(); if (elements.isEmpty()) { return null; } return elements; } public static void main(String[] args) throws Exception { DefClassPathXmlApplicationContext defClassPathXmlApplicationContext = new DefClassPathXmlApplicationContext( "spring.xml"); Object bean = defClassPathXmlApplicationContext.getBean("userServiceImpl"); } }
标签:xml,elements,return,String,Spring,DefClassPathXmlApplicationContext,xmlPath,bean 来源: https://www.cnblogs.com/pickKnow/p/11151768.html