pack source color load model 测试 unit getmethod
BeanFactory
- 1 package com.bjsxt.spring;
- 2
- 3 public interface BeanFactory {
- 4 public Object getBean(String name);
- 5}
ClassPathXmlApplicationContext
- 1 package com.bjsxt.spring;
- 2
- 3 import java.lang.reflect.Method;
- 4 import java.util.HashMap;
- 5 import java.util.List;
- 6 import java.util.Map;
- 7
- 8 import org.jdom.Document;
- 9 import org.jdom.Element;
- 10 import org.jdom.input.SAXBuilder;
- 11
- 12 public classClassPathXmlApplicationContextimplements BeanFactory{
- 13 privateMap beans = newHashMap();
- 14
- 15 publicClassPathXmlApplicationContext()throws Exception{
- 16SAXBuilder sb =new SAXBuilder();
- 17Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));
- 18Element root = doc.getRootElement();//获取根元素
- 19List list = root.getChildren("bean");//取名字为bean的所有元素
- 20 for(inti=0; i){
- 21Element element = (Element) list.get(i);
- 22String id = element.getAttributeValue("id");
- 23String clazz = element.getAttributeValue("class");
- 24System.out.println(id + ":" + clazz);
- 25Object o = Class.forName(clazz).newInstance();
- 26 beans.put(id, o);
- 27
- 28 for(Element propertyElement : (List)element.getChildren("property")){
- 29String name = propertyElement.getAttributeValue("name");//userDAO
- 30String bean = propertyElement.getAttributeValue("bean");//u
- 31Object beanObject = beans.get(bean);//UserDAOImpl instance
- 32
- 33String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
- 34System.out.println("method name = " + methodName);
- 35
- 36Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
- 37 m.invoke(o, beanObject);
- 38 }
- 39 }
- 40 }
- 41
- 42 public Object getBean(String name) {
- 43 return beans.get(name);
- 44 }
- 45
- 46}
beans.xml
- 1 <beans>
- 2 <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean>
- 3 <bean id="userService" class="com.bjsxt.service.UserService">
- 4 <property name="userDAO" bean="u"></property>
- 5 </bean>
- 6 </beans>
UserDAO
- 1 package com.bjsxt.dao;
- 2
- 3 import com.bjsxt.model.User;
- 4
- 5 public interface UserDAO {
- 6 public void save(User u);
- 7}
UserDAOImpl
- 1 package com.bjsxt.dao.impl;
- 2
- 3 import com.bjsxt.dao.UserDAO;
- 4 import com.bjsxt.model.User;
- 5
- 6 public classUserDAOImplimplements UserDAO{
- 7
- 8 public void save(User u) {
- 9System.out.println("a user saved!");
- 10 }
- 11
- 12}
测试类:
- 1 package com.bjsxt.service;
- 2
- 3 import org.junit.Test;
- 4
- 5 import com.bjsxt.model.User;
- 6 import com.bjsxt.spring.BeanFactory;
- 7 import com.bjsxt.spring.ClassPathXmlApplicationContext;
- 8
- 9 public class UserServiceTest {
- 10
- 11 @Test
- 12 public voidtestAddUser()throws Exception {
- 13BeanFactory factory =new ClassPathXmlApplicationContext();
- 14
- 15UserService service = (UserService)factory.getBean("userService");
- 16User u =new User();
- 17 service.addUser(u);
- 18 }
- 19
- 20}
代码链接: http://pan.baidu.com/s/1eSoYu8i 密码: gtj2
所需 jar 包:
junit 链接: http://pan.baidu.com/s/1kVFS8lx 密码: mkh3
jdom 链接: http://pan.baidu.com/s/1c1X15Xu 密码: 9vpi
模拟 Spring 框架
来源: http://www.bubuko.com/infodetail-2076089.html