手工方式实现Spring工厂创建对象

来源:互联网 发布:ubuntu安装桌面环境 编辑:程序博客网 时间:2024/06/06 00:49

Sping的主要功能就是省去了我们自己创建对象的麻烦,下面就用一个简单的例子,利用Java的DOM解析、反射机制简单实现Spring工厂。当然这是简单实现,没有实际spring工厂那么复杂。但是原理基本就是这样了。

1.在eclipse跟目录中创建我们所熟悉的beans.xml文件:我存放的路径为根目录。

<?xml version="1.0" encoding="UTF-8"?><beans><bean id="user" class="com.lwk.springbean.User"><property name="username" value="李卫康"></property><property name="password" value="123456"></property></bean></beans>


2.在com.lwk.springbean包路径下创建User类

package com.lwk.springbean;/*** @author 作者 E-mail:李卫康* @version 创建时间:2017年7月7日 下午1:52:23* 类说明*/public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return username+":"+password;}}


3.在com.lwk.demo包路径下创建SpringBeanFactory.java文件

package com.lwk.springbean;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;/*** @author 作者 E-mail:李卫康* @version 创建时间:2017年7月7日 下午1:50:24* 类说明:spring工厂类*/public class SpringBeanFactory {private static Map<String, Object> map=new HashMap<>();public static void main(String[] args) {init();}public static void init(){try {//1.加载配置文件(使用相对路径)InputStream in = SpringBeanFactory.class.getResourceAsStream("../../../beans.xml");SAXReader reader=new SAXReader();Document document = reader.read(in);//2.得到配置文件的根节点Element element = document.getRootElement();List <Element>elements = element.elements();for(Element e:elements){Attribute id = e.attribute("id");Attribute clazz = e.attribute("class");Class<?> bean = Class.forName(clazz.getText());User user = (User) bean.newInstance();List<Element> properties = e.elements();for(Element pro:properties){Attribute name = pro.attribute("name");Attribute value = pro.attribute("value");user.setUsername(name.getData().toString());user.setPassword(value.getData().toString());}map.put(id.getText(), user);}} catch (Exception e) {e.printStackTrace();}}public static Object getBean(String id){return map.get(id);}}


4.最后编写测试类

public class SpringDemo {public static void main(String[] args) {SpringBeanFactory.init();User user = (User) SpringBeanFactory.getBean("user");System.out.println(user.toString());}}


5.运行结果为:password:123456





原创粉丝点击