1、读取config.xml文件的bean标签放入数组,读取内容包括id和class。
2、循环数组并根据class路径利用反射机制实例化Bean,并放入Map。
3、根据传入的BeanId获取Map中对应的bean实例。
- package com.yt.core.yl;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import org.apache.log4j.Logger;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- import com.yt.spring.user.UserBean;
- /**
- * @Description: Spring管理Bean原理
- * @ClassName: ClassPathXMLApplicationContext
- * @Project: spring-aop
- * @Author: zxf
- * @Date: 2011-6-3
- */
- public class ClassPathXMLApplicationContext {
- Logger log = Logger.getLogger(ClassPathXMLApplicationContext.class);
- List<BeanDefinition> beanList = new ArrayList<BeanDefinition>();
- Map<String, Object> sigletions = new HashMap<String, Object>();
- public ClassPathXMLApplicationContext(String fileName) {
- this.readXML(fileName);
- this.instancesBean();
- }
- /**
- * 读取Bean配置文件
- *
- * @param fileName
- * @return
- */
- @SuppressWarnings("unchecked")
- public void readXML(String fileName) {
- Document document = null;
- SAXReader saxReader = new SAXReader();
- try {
- ClassLoader classLoader = Thread.currentThread()
- .getContextClassLoader();
- document = saxReader
- .read(classLoader.getResourceAsStream(fileName));
- Element beans = document.getRootElement();
- for (Iterator<Element> beansList = beans.elementIterator(); beansList
- .hasNext();) {
- Element element = beansList.next();
- BeanDefinition bean = new BeanDefinition(
- element.attributeValue("id"),
- element.attributeValue("class"));
- beanList.add(bean);
- }
- } catch (DocumentException e) {
- log.info("读取配置文件出错....");
- }
- }
- /**
- * 实例化Bean
- */
- public void instancesBean() {
- for (BeanDefinition bean : beanList) {
- try {
- sigletions.put(bean.getId(), Class.forName(bean.getClassName())
- .newInstance());
- } catch (Exception e) {
- log.info("实例化Bean出错...");
- }
- }
- }
- /**
- * 获取Map中的对应的bean实例
- * @param beanId
- * @return
- */
- public Object getBean(String beanId) {
- return sigletions.get(beanId);
- }
- public static void main(String[] args) {
- ClassPathXMLApplicationContext path = new ClassPathXMLApplicationContext(
- "config.xml");
- UserBean userBean = (UserBean)path.getBean("userBean");
- userBean.setUserName("zxf_noimp");
- System.out.println(userBean.getUserName());
- }
- }
- package com.yt.core.yl;
- /**
- * @Description:
- * @ClassName: BeanDefinition
- * @Project: spring-aop
- * @Author: zxf
- * @Date: 2011-6-3
- */
- public class BeanDefinition {
- public String id;
- public String className;
- public BeanDefinition(String id, String className) {
- this.id = id;
- this.className = className;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getClassName() {
- return className;
- }
- public void setClassName(String className) {
- this.className = className;
- }
- }