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");
        }
    }
  • 相关阅读:
    P1659 [国家集训队]拉拉队排练
    manacher小结
    P4555 [国家集训队]最长双回文串
    P3649 [APIO2014]回文串
    P3899 [湖南集训]谈笑风生
    插头dp练习
    luoguP3066 [USACO12DEC]逃跑的BarnRunning
    luoguP3769 [CH弱省胡策R2]TATT
    android 广播,manifest.xml注册,代码编写
    *.db-journal 是什么(android sqlite )数据库删除缓存
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11151768.html
Copyright © 2011-2022 走看看