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");
        }
    }
  • 相关阅读:
    Asp.NET 4.0 ajax实例DataView 模板编程1
    ASP.NET 4.0 Ajax 实例DataView模板编程 DEMO 下载
    部分东北话、北京话
    .NET 培训课程解析(一)
    ASP.NET 4.0 Ajax 实例DataView模板编程2
    ASP.NET Web Game 架构设计1服务器基本结构
    ASP.NET Web Game 构架设计2数据库设计
    TFS2008 基本安装
    Linux上Oracle 11g安装步骤图解
    plsql developer远程连接oracle数据库
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11151768.html
Copyright © 2011-2022 走看看