模拟spring 框架读取配置文件

   通过配置文件来初始化对象,并实现注入。

BeanFactory 文件


package com.bjsxt;



public interface BeanFactory {

	public Object getBean(String string);
}


ClassPathXmlApplicationContext 文件
package com.bjsxt;

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;

/**
 * TODO クラスの概要を記述。
 *
 * @author  TODO replace_your_name
 * @since   2016/11/13
 */
public class ClassPathXmlApplicationContext implements BeanFactory {

	private Map<String, Object> beans = new HashMap<String, Object>();

	/**
	 * コンストラクタ
	 * @throws Exception
	 */
	public ClassPathXmlApplicationContext() throws Exception {
		SAXBuilder sb = new SAXBuilder();
		Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象
		Element root = doc.getRootElement(); //获取根元素HD
		List<?> list = root.getChildren("bean");//取名字为disk的所有元素
		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 object = Class.forName(clazz).newInstance();
			System.out.println(id);
			System.out.println(clazz);
			beans.put(id, object);
			@SuppressWarnings("unchecked")
			List<Element> listP = element.getChildren("property");
			for (int j = 0; j < listP.size(); j++) {
				Element elementP = (Element) listP.get(j);
				String name = elementP.getAttributeValue("name");
				String bean = elementP.getAttributeValue("bean");
				Object objectP = beans.get(bean);
				String setName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
				System.out.println("method name = " + setName);
				Method m = object.getClass().getMethod(setName, objectP.getClass().getInterfaces()[0]);
				m.invoke(object, objectP);
			}
		}
	}

	@Override
	public Object getBean(String string) {
		//  自動生成されたメソッド・スタブ
		return beans.get(string);
	}
}

UserDao文件
package com.bjsxt.dao.impl;


/**
 * TODO クラスの概要を記述。
 *
 * @author  TODO replace_your_name
 * @since   2016/11/13
 */
public interface UserDao {

	/**
	 *
	 */
	void save();
}


UserDao  文件
package com.bjsxt.dao.impl;


/**
 * TODO クラスの概要を記述。
 *
 * @author  TODO replace_your_name
 * @since   2016/11/13
 */
public class UserDAOImpl implements UserDao {

	public void save() {
		System.out.println("user saved!");
	}
}


User 文件
package com.bjsxt.service;


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;
	}
}




UserService 文件
package com.bjsxt.service;

import com.bjsxt.dao.impl.UserDao;


public class UserService {

	private UserDao userDAO;

	public UserDao getUserDAO() {
		return userDAO;
	}

	public void setUserDAO(UserDao userDAO) {
		this.userDAO = userDAO;
	}

	public void add(User u) {
		// TODO 自動生成されたメソッド・スタブ
		userDAO.save();
	}
}



beans.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>



UserServiceTest 文件
package com.bjsxt.service;
import org.junit.Test;

import com.bjsxt.BeanFactory;
import com.bjsxt.ClassPathXmlApplicationContext;


public class UserServiceTest {

	@Test
	public void testAdd() throws Exception {
		BeanFactory applicationContext = new ClassPathXmlApplicationContext();
		UserService service = (UserService) applicationContext.getBean("userService");
		User u = new User();
		u.setUsername("zhangsan");
		u.setPassword("zhangsan");
		service.add(u);
	}

}

[size=x-small]以下是读取实例:[/size]


Sample1 文件
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class Sample1 {
  public static void main(String[] args) throws Exception{
    SAXBuilder sb=new SAXBuilder();

    Document doc=sb.build(Sample1.class.getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象
    Element root=doc.getRootElement(); //获取根元素HD
    List list=root.getChildren("bean");//取名字为disk的所有元素
    for(int i=0;i<list.size();i++){
       Element element=(Element)list.get(i);
       String id=element.getAttributeValue("id");
       String clazz=element.getAttributeValue("class");
       System.out.println(id);
       System.out.println(clazz);
       /*
       String capacity=element.getChildText("capacity");//取disk子元素capacity的内容
       String directories=element.getChildText("directories");
       String files=element.getChildText("files");
       System.out.println("磁盘信息:");
       System.out.println("分区盘符:"+name);
       System.out.println("分区容量:"+capacity);
       System.out.println("目录数:"+directories);
       System.out.println("文件数:"+files);
       System.out.println("-----------------------------------");
       */
    }
  }
}


test.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<HD>
  <disk name="C">
    <capacity>8G</capacity>
    <directories>200</directories>
    <files>1580</files>
  </disk>

  <disk name="D">
    <capacity>10G</capacity>
    <directories>500</directories>
    <files>3000</files>
  </disk>
</HD> 

猜你喜欢

转载自chimpp55.iteye.com/blog/2344329