Spring学习1--前传

来源:互联网 发布:java udp socket 编辑:程序博客网 时间:2024/06/09 19:43

1.什么是IOC(DI)?

   把自己new的东西改为容器提供 。 a) 初始化具体值    b)装配

 

2.好处

  灵活装配

 

<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>
public class ClassPathXmlApplicationContext implements BeanFactory {private Map<String , Object> beans = new HashMap<String, Object>();//IOC Inverse of Control DI Dependency Injectionpublic 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 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);}}



 

 

原创粉丝点击