- xml version="1.0" encoding="UTF-8"?>
- <beans xmlns=""
- xmlns:xsi=""
- xmlns:context=""
- xmlns:tx=""
- xsi:schemaLocation=" /spring-beans-2.5.xsd
- /spring-context-2.5.xsd
- /spring-tx-2.5.xsd">
- <bean id="userBean" class="com.szy.spring.implbean.UserBean" />
- beans>
Spring的配置文件中记录了类的包路径,因此我们首先是要读入配置文件。在配置文件中Bean有id和class两个属性,我们首先定义一个Bean类,包含这两个属性:
- package com.szy.spring.implbean;
-
- public class Bean
- {
- private String id;
- private String 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;
- }
-
- }
-
由于配置文件是xml文件,在这里使用Jdom包操作xml文件,读入配置文件中的Bean信息。
-
-
-
-
- private void readXML(String fileName)
- {
-
- URL xmlPath = this.getClass().getClassLoader().getResource(fileName);
- Document doc = null;
- Element root = null;
- try
- {
- SAXBuilder sb = new SAXBuilder(false);
- doc = sb.build(new FileInputStream(new File(xmlPath.toURI())));
-
- Namespace xhtml = Namespace.getNamespace("xhtml",
- "");
- root = doc.getRootElement();
- List list = root.getChildren("bean", xhtml);
- for (Element element : list)
- {
- String id = element.getAttributeValue("id");
- String className = element.getAttributeValue("class");
- Bean bean = new Bean();
- bean.setId(id);
- bean.setClassName(className);
- beanList.add(bean);
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- }
-
- }
其中beanList是一个List对象,因为在配置文件中存在很多Bean。
得到了所有的Bean对象后,下面就实例化每个Bean对象,结果存放在Map对象中。
-
-
-
- private void instanceBeans()
- {
- for (Bean bean : beanList)
- {
- try
- {
- if (bean.getClassName() != null && !"".equals(bean.getClassName().trim()))
- beanObject.put(bean.getId(), Class.forName(bean.getClassName()).newInstance());
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- }
-
- }
其中beanObject为Map对象。
最后再加入一个方法,方便外部能获取Map中的对象
-
-
-
-
-
- public Object getBean(String beanName)
- {
- return this.beanObject.get(beanName);
- }
完整的MyClassPathXMLApplicationContext见附件中的代码。
下面测试MyClassPathXMLApplicationContext类。
- @Test
- public void testMethod() throws Exception
- {
-
- MyClassPathXMLApplicationContext ctx=new MyClassPathXMLApplicationContext("applicationContext.xml");
-
- PersonBean bean=(PersonBean)ctx.getBean("userBean");
-
- bean.show();
- }
输出结果
成功。
上面仅是简单的演示了Spring管理Bean的原理,但是在实际操作中还需要考虑很对其它因素。
阅读(1957) | 评论(0) | 转发(0) |