• 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");
        }
    }
  • 相关阅读:
    TCP 监控工具 TCPMonitor
    程序员职业规划
    <转>eclipse如何修改dynamic web module version .
    JBoss部属和EJB调用-EJB3.0入门经典学习笔记(2)
    环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)
    【EDA】PCBA丝印尺寸
    【Altium Designer】PCB如何用规则检查
    【Cadence】Gerber之二:钻孔文件设置与生成
    【生产】如何设计生产线
    【EMC】脉冲群Burst
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11151768.html
Copyright © 2020-2023  润新知