Spring依赖注入的XML配置文件的实现思想(2)——简单的实现
2014-09-26 15:50
966 查看
1、首先创建一个HashMap,来充当Spring的容器,把所有的bean的实例都放在这个容器中;
2、从bean.xml文件中读取配置信息,并且通过Jdom读取配置文件的bean的id、class的属性,通过反射来实例化这个bean对象,然后把bean这个对象放入到HashMap中,id作为key值;
3、判断在bean.xml中注册的bean,是不是需要注入其他的属性,如果需要,通过bean.xml这个文件读取这个属性,可以得到“属性名称”和“依赖实例”,通过这个属性名称拼接得到这个bean的set+“属性名称”的方法,通过依赖的实例id从容器中得到这个实例,调用得到的方法把这个实例注入进去;
具体的代码实现:
1.bean.xml配置文件:
2、具体的Java代码:
2、从bean.xml文件中读取配置信息,并且通过Jdom读取配置文件的bean的id、class的属性,通过反射来实例化这个bean对象,然后把bean这个对象放入到HashMap中,id作为key值;
3、判断在bean.xml中注册的bean,是不是需要注入其他的属性,如果需要,通过bean.xml这个文件读取这个属性,可以得到“属性名称”和“依赖实例”,通过这个属性名称拼接得到这个bean的set+“属性名称”的方法,通过依赖的实例id从容器中得到这个实例,调用得到的方法把这个实例注入进去;
具体的代码实现:
1.bean.xml配置文件:
<beans> <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl" /> <bean id="userService" class="com.bjsxt.service.UserService" > <property name="userDAO" bean="u"/> </bean> </beans>
2、具体的Java代码:
package com.bjsxt.spring; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class ClassPathXmlApplicationContext implements BeanFactory { private Map<String , Object> beans = new HashMap<String, Object>(); //IOC Inverse of Control DI Dependency Injection public ClassPathXmlApplicationContext() throws Exception { SAXBuilder sb=new SAXBuilder(); Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); Element root=doc.getRootElement(); List list=root.getChildren("bean"); for(int i=0;i<list.size();i++){ Element element=(Element)list.get(i); String id=element.getAttributeValue("id"); String clazz=element.getAttributeValue("class"); Object o = Class.forName(clazz).newInstance(); System.out.println(id); System.out.println(clazz); beans.put(id, o); for(Element propertyElement : (List<Element>)element.getChildren("property")) { String name = propertyElement.getAttributeValue("name"); //userDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl instance String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); System.out.println("method name = " + methodName); Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); m.invoke(o, beanObject); } } } public Object getBean(String id) { return beans.get(id); } }
相关文章推荐
- spring 框架中的依赖注入(IOC--设值注入)---使用xml简单配置文件---的具体实例的简单实现
- Spring依赖注入的XML配置文件的实现思想(1)——准备工作:如何读取XML的文件的内容
- Spring_使用XML配置文件实现依赖注入
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- Spring之依赖注入与XML配置文件
- 使用XPath解析xml实现简单的Spring IOC完成bean的依赖注入
- 【第十二章】零配置 之 12.2 注解实现Bean依赖注入 ——跟我学spring3
- 零配置 之 12.2 注解实现Bean依赖注入 ——跟我学spring3
- Spring中利用AOP对领域对象(非依赖注入的对象,如new操作符、反射的方式生存的对象)下面是spring配置文件的一部分 <context:load-time-weaver /> <be
- 模拟spring的注入和读取配置文件(ApplicationContext.xml)
- 使用dom4j:读取spring配置文件,实例化bean对象并注入依赖对象
- 模拟spring的注入和读取配置文件(ApplicationContext.xml)
- 开涛spring3(12.2) - 零配置 之 12.2 注解实现Bean依赖注入
- spring通过注解依赖注入和获取xml配置混合的方式
- Spring学习笔记----依赖注入的简单实现
- dom4j实现模拟Spring读取配置文件 注入
- Spring零配置通过注解实现Bean依赖注入总结<转>
- 【第十二章】零配置 之 12.1 概述 12.2 注解实现Bean依赖注入 ——跟我学spring3
- spring 依赖注入xml配置原理解析