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");
}
}
Spring ioc xml 实例化bean 自己实现的更多相关文章
- spring IOC容器实例化Bean的方式与RequestContextListener应用
spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...
- 5. Spring 通过 XML 配置 bean (进阶)
1. 设置 bean 的作用域 当通过 Spring IOC 容器创建 bean 实例的时候,不仅可以完成 bean 的实例化,也可以为 bean 指定特定的作用域,Spring 支持以下 5 种作用 ...
- spring-framework-中文文档一:IoC容器、介绍Spring IoC容器和bean
5. IoC容器 5.1介绍Spring IoC容器和bean 5.2容器概述 本章介绍Spring Framework实现控制反转(IoC)[1]原理.IoC也被称为依赖注入(DI).它是一个过程, ...
- Spring IOC容器创建bean过程浅析
1. 背景 Spring框架本身非常庞大,源码阅读可以从Spring IOC容器的实现开始一点点了解.然而即便是IOC容器,代码仍然是非常多,短时间内全部精读完并不现实 本文分析比较浅,而完整的IOC ...
- 使用Junit测试一个 spring静态工厂实例化bean 的例子,所有代码都没有问题,但是出现java.lang.IllegalArgumentException异常
使用Junit测试一个spring静态工厂实例化bean的例子,所有代码都没有问题,但是出现 java.lang.IllegalArgumentException 异常, 如下图所示: 开始以为是代码 ...
- 02Spring基于xml的IOC配置--实例化Bean的三种方式
maven依赖 <dependencies> <!--IOC相关依赖--> <dependency> <groupId>org.springframew ...
- Spring IoC介绍与Bean的使用
1. 介绍 IoC IoC-Inversion of Control,即"控制反转",它不是什么技术,而是一种设计思想.在 Java 开发中, IoC意味着将设计好的对象交给容 ...
- Spring IoC 容器和 bean 对象
程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包 ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
随机推荐
- LeetCode:两数之和、三数之和、四数之和
LeetCode:两数之和.三数之和.四数之和 多数之和问题,利用哈希集合减少时间复杂度以及多指针收缩窗口的巧妙解法 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在 ...
- Subsequence POJ - 3061
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22040 Accepted: 9404 Desc ...
- C#桌面开发的未来-WebWindow
WebWindow源码作者博客基于Chromium的Edge体验体验方式一:体验方式二:预期目标:遗留的问题 WebWindow WebWindow是跨平台的库. Web Window的当前实验实现可 ...
- Spark RDD Tutorial
Spark RDD教程 这个教程将会帮助你理解和使用Apache Spark RDD.所有的在这个教程中使用的RDD例子将会提供在github上,供大家快速的浏览. 什么是RDD(Rssilient ...
- Redis01——Redis究竟支持哪些数据结构
Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指 ...
- Python包的应用
包的简介 你们听到的包,可不是女同胞疯狂喜欢的那个包,我们来看看这个是啥包 官方解释: ? 1 2 3 4 5 6 7 8 9 Packages are a way of structuring Py ...
- vue中计算属性中的set和get
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <body& ...
- js 实现字符串的查找和替换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Hadoop集群搭建(六)~安装JDK
前面集群的准备工作都做完了,本篇记录安装JDK,版本位1.8 1,在opt目录下创建software和module文件夹:software用来放安装包,module为安装目录 2,把JDK和hadoo ...
- javaScript 基础知识汇总 (十四)
1.回调 什么是回调? 个人理解,让函数有序的执行. 示例: function loadScript(src,callback){ let script = document.createElemen ...