zoukankan      html  css  js  c++  java
  • 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");
        }
    }
  • 相关阅读:
    C# 安装包中添加卸载
    如何提取json里面的数据
    JSON写入
    在Net下处理Json
    Linq To Json
    衡量视频序列特性的TI(时间信息)和SI(空间信息)
    DotCMS安装步骤
    【12c OCP】最新CUUG OCP071考试题库(52题)
    【ocp12c】最新Oracle OCP071考试题库(44题)
    【Oracle 12c】最新CUUG OCP071考试题库(53题)
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11151768.html
Copyright © 2011-2022 走看看