spring管理bean原理

1、读取config.xml文件的bean标签放入数组,读取内容包括id和class。 
2、循环数组并根据class路径利用反射机制实例化Bean,并放入Map。
3、根据传入的BeanId获取Map中对应的bean实例。

Java代码   收藏代码
  1. package com.yt.core.yl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import org.apache.log4j.Logger;  
  9. import org.dom4j.Document;  
  10. import org.dom4j.DocumentException;  
  11. import org.dom4j.Element;  
  12. import org.dom4j.io.SAXReader;  
  13. import com.yt.spring.user.UserBean;  
  14.   
  15. /** 
  16.  * @Description: Spring管理Bean原理 
  17.  * @ClassName: ClassPathXMLApplicationContext 
  18.  * @Project: spring-aop 
  19.  * @Author: zxf 
  20.  * @Date: 2011-6-3 
  21.  */  
  22. public class ClassPathXMLApplicationContext {  
  23.   
  24.     Logger log = Logger.getLogger(ClassPathXMLApplicationContext.class);  
  25.   
  26.     List<BeanDefinition> beanList = new ArrayList<BeanDefinition>();  
  27.     Map<String, Object> sigletions = new HashMap<String, Object>();  
  28.   
  29.     public ClassPathXMLApplicationContext(String fileName) {  
  30.         this.readXML(fileName);  
  31.         this.instancesBean();  
  32.     }  
  33.   
  34.     /** 
  35.      * 读取Bean配置文件 
  36.      *  
  37.      * @param fileName 
  38.      * @return 
  39.      */  
  40.     @SuppressWarnings("unchecked")  
  41.     public void readXML(String fileName) {  
  42.         Document document = null;  
  43.         SAXReader saxReader = new SAXReader();  
  44.         try {  
  45.             ClassLoader classLoader = Thread.currentThread()  
  46.                     .getContextClassLoader();  
  47.             document = saxReader  
  48.                     .read(classLoader.getResourceAsStream(fileName));  
  49.             Element beans = document.getRootElement();  
  50.             for (Iterator<Element> beansList = beans.elementIterator(); beansList  
  51.                     .hasNext();) {  
  52.                 Element element = beansList.next();  
  53.                 BeanDefinition bean = new BeanDefinition(  
  54.                         element.attributeValue("id"),  
  55.                         element.attributeValue("class"));  
  56.                 beanList.add(bean);  
  57.             }  
  58.         } catch (DocumentException e) {  
  59.             log.info("读取配置文件出错....");  
  60.         }  
  61.     }  
  62.       
  63.     /** 
  64.      * 实例化Bean 
  65.      */  
  66.     public void instancesBean() {  
  67.         for (BeanDefinition bean : beanList) {  
  68.             try {  
  69.                 sigletions.put(bean.getId(), Class.forName(bean.getClassName())  
  70.                         .newInstance());  
  71.             } catch (Exception e) {  
  72.                 log.info("实例化Bean出错...");  
  73.             }  
  74.         }  
  75.     }  
  76.       
  77.     /** 
  78.      * 获取Map中的对应的bean实例 
  79.      * @param beanId 
  80.      * @return 
  81.      */  
  82.     public Object getBean(String beanId) {  
  83.         return sigletions.get(beanId);  
  84.     }  
  85.   
  86.   
  87.     public static void main(String[] args) {  
  88.         ClassPathXMLApplicationContext path = new ClassPathXMLApplicationContext(  
  89.                 "config.xml");  
  90.         UserBean userBean = (UserBean)path.getBean("userBean");  
  91.         userBean.setUserName("zxf_noimp");  
  92.         System.out.println(userBean.getUserName());  
  93.     }  
  94. }  
 
Java代码   收藏代码
  1. package com.yt.core.yl;  
  2.   
  3. /** 
  4.  * @Description: 
  5.  * @ClassName: BeanDefinition 
  6.  * @Project: spring-aop 
  7.  * @Author: zxf 
  8.  * @Date: 2011-6-3 
  9.  */  
  10. public class BeanDefinition {  
  11.   
  12.     public String id;  
  13.     public String className;  
  14.   
  15.     public BeanDefinition(String id, String className) {  
  16.         this.id = id;  
  17.         this.className = className;  
  18.     }  
  19.   
  20.     public String getId() {  
  21.         return id;  
  22.     }  
  23.   
  24.     public void setId(String id) {  
  25.         this.id = id;  
  26.     }  
  27.   
  28.     public String getClassName() {  
  29.         return className;  
  30.     }  
  31.   
  32.     public void setClassName(String className) {  
  33.         this.className = className;  
  34.     }  
  35.   
  36. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值