Spring学习笔记——Sprin管理Bean的原理
来源:互联网 发布:会计电算化软件下载 编辑:程序博客网 时间:2024/05/01 06:27
当我们使用Spring时候在Xml文件中通过
<bean id="service" class="com.finance.service.AmountServiceImpl" />
配置就可以操作该Bean的属性和方法,那么Spring到底是如何实现的呢?下面让我们自己实现这个过程。
首先我模拟Spring的命名方式创建一个Bean管理类MyClassPathXMLApplicationContext.java,代码如下:
// 自定义容器public class MyClassPathXMLApplicationContext { private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>(); private Map<String, Object> singletons = new HashMap<String, Object>(); public MyClassPathXMLApplicationContext(String filename){ // 1、读取配置文件 this.readXML(filename); // 2、实例化Bean this.instanceBeans(); } /** * 完成bean的实例化 */ private void instanceBeans() { for(BeanDefinition beanDefinition : beanDefines){ try { if(beanDefinition.getClassName()!=null && !"".equals(beanDefinition.getClassName().trim())) singletons.put(beanDefinition.getId(), Class.forName(beanDefinition.getClassName()).newInstance()); } catch (Exception e) { e.printStackTrace(); } } } /** * 读取xml配置文件 * @param filename */ private void readXML(String filename) { SAXReader saxReader = new SAXReader(); Document document=null; try{ URL xmlpath = this.getClass().getClassLoader().getResource(filename); document = saxReader.read(xmlpath); Map<String,String> nsMap = new HashMap<String,String>(); nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间 XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径 xsub.setNamespaceURIs(nsMap);//设置命名空间 List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点 for(Element element: beans){ String id = element.attributeValue("id");//获取id属性值 String clazz = element.attributeValue("class"); //获取class属性值 BeanDefinition beanDefine = new BeanDefinition(id, clazz); beanDefines.add(beanDefine); } }catch(Exception e){ e.printStackTrace(); } } /** * 获取bean实例 * @param beanName * @return */ public Object getBean(String beanName){ return this.si呢gletons.get(beanName); }}
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean></beans>
下面我们来测试一下:
public class SpringTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void instanceSpring(){ MyClassPathXMLApplicationContext ctx = new MyClassPathXMLApplicationContext("beans.xml"); PersonService personService = (PersonService)ctx.getBean("personService"); personService.save(); }}
运行成功
1 0
- Spring学习笔记——Sprin管理Bean的原理
- Sprin笔记-bean的生命周期
- Spring笔记——模拟spring的bean管理原理以及依赖注入原理
- Spring(二)——Spring管理Bean的原理
- Spring学习笔记(3)----编码剖析Spring管理Bean的原理
- Spring学习笔记(3)----编码剖析Spring管理Bean的原理
- Beginning Spring学习笔记——第2章(三)Spring的Bean管理
- Spring管理Bean的原理
- spring管理bean的原理
- spring管理bean的原理
- spring管理bean的原理
- spring管理bean的原理
- spring管理bean的原理
- spring2.5.6学习笔记四:编码剖析Spring管理Bean的原理
- sprin boot 学习笔记
- Spring:spring管理bean的原理
- spring学习笔记叁——spring的bean注解
- Spring学习笔记(1):Bean的生命周期管理
- sqlserver2008,创建一个用户和对应一个架构,只对这个架构下的表有访问权限
- Jmeter 运行脚本 提示无法登录
- hadoop单个数据节点的不同存储路径的存储策略源码分析
- [断点调试好助手]LLDB调试
- Dart Essentials(读书笔记)——这本书很大篇幅都在谈AngularDart,Zones概念没谈到
- Spring学习笔记——Sprin管理Bean的原理
- [BZOJ 1029][JSOI2007]建筑抢修
- 最大子列和算法
- sql left join的多表应用
- nginx配置文件详解
- Spark开发问题集锦
- grep命令的详细使用方法
- 网站怎么运转的
- 约瑟夫环问题