spring bean

简单的xml配置文件 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans>  
  3.     <bean id="userDAO" class="com.king.dao.impl.UserDAOImpl"></bean>  
  4.       
  5.     <bean id="userService" class="com.king.service.impl.UserServiceImpl">  
  6.         <property name="userDAO" ref="userDAO"></property>  
  7.     </bean>  
  8. </beans>  

BeanFactory接口 
Java代码   收藏代码
  1. public interface BeanFactory  
  2. {  
  3.     public Object getBean(String name);  
  4. }  

实现BeanFactory的接口 
Java代码   收藏代码
  1. public class ClassPathXmlApplicationContext implements BeanFactory{  
  2.     private Map<String,Object> beans = new HashMap<String,Object>(); // map for store beans  
  3.       
  4.          /***constructor****/  
  5.     public ClassPathXmlApplicationContext()   
  6.     {  
  7.         SAXBuilder sb = new SAXBuider();  
  8.         Document doc = sb.builder(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));//read the xml file in classpath  
  9.         Element root = doc.getRootElement(); // beans  
  10.         List list = root.getChildren("bean"); // all beans in that list  
  11.           
  12.         int size = list.size();  
  13.           
  14.         for(int i = 0; i< size; i++)  
  15.         {  
  16.             Element element = list.get(i);  
  17.               
  18.             String id = element.getAttributeValue("id"); // get id  
  19.             String clazz = element.getAttributeValue("class"); // get class  
  20.               
  21.             Object o = Class.forName(clazz).newInstance(); // reflect   
  22.             beans.put(id,o); // put into the map  
  23.               
  24.             List<Element> properties = (List<Element>) element.getChildren("property"); // get property config,for DI  
  25.               
  26.             for(Element property : properties)  
  27.             {  
  28.                 String name = property.getAttributeValue("name"); // get name  
  29.                 String ref = property.getAttributeValue("ref"); // get reference bean name  
  30.                   
  31.                 Object refBean = beans.get(ref); // get reference bean form map  
  32.                   
  33.                 String methodName = "set" + name.subString(0,1).toUpperCase() + name.subString(1); // setter method name  
  34.                 System.out.println(methodName);  
  35.                   
  36.                 Method m = o.getClass().getMethod(methodName,refBean.getClass.getInterfaces()[0]); // get method parameters   
  37.                 m.invoke(o,refBean); // execute to inject reference bean   
  38.             }  
  39.         }  
  40.     }  
  41.       
  42.     public Object getBean(String name)  
  43.     {  
  44.         return beans.get(name);  
  45.     }  


调用测试: 
Java代码   收藏代码
  1. public SpringTest{  
  2.     
  3.     @Test  
  4.     public void testAdd()  
  5.     {  
  6.         BeanFactory factory = new ClassPathXmlApplicationContext();  
  7.         UserService service = (UserService) factory.getBean("userService");  
  8.   
  9.         User u = new User();  
  10.         service.add(u);  
  11.     }  
  12. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值