Spring中对bean的管理主要有3种方式
分别是 BeanWrapper BeanFactory 和 ApplicationContext。
1.使用BeanWrapper来管理bean。
在org.springframework.beans包中,有两个非常重要的类:BeanWrapper接口及它的实现BeanWrapperImpl。BeanWrapper封装了
一个bean的行为,提供了设置和获得属性值的功能。通过BeanWrapper可以可以获得Bean的属性描述,查询只读或者可写属性。
实例:
1.HelloWorld.java
/**
*
*/
package jp.co.xiehl.learn.ch2.action;
import java.util.Date;
public class HelloWorld {
private String msg;
private Date date;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
配置文件不许改动,因为该方式不需要配置文件。
测试类
// 通过Class.forName方法获取HelloWorld类的一个实例
Object obj = Class.forName("jp.co.xiehl.learn.ch2.action.HelloWorld").newInstance();
// 通过BeanWrapper 来设定HelloWorld的属性
BeanWrapper bw = new BeanWrapperImpl(obj);
// 根据类变量设置变量的值
bw.setPropertyValue("msg", "Hello BeanWrapper");
System.out.println("BeanWrapper:msg="+bw.getPropertyValue("msg"));
2.使用BeanFactory来管理bean
BeanFactory实际上是实例化,配置和管理众多Bean的容器。这些bean通常会彼此合作,因而它们之间会产生依赖。
一个BeanFactory可以接口org.springframework.beans.factory.BeanFactory表示,这个接口有多个实现。最常用的简单的BeanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory.
实例:通过beanfactory来实现输出HelloWorld。
配置文件
<property name="msg">
<value>HelloWorld</value>
</property>
修改测试程序:
// 通过ClassPathResource 获取配置文档
ClassPathResource res = new ClassPathResource("config.xml");
// 通过XmlBeanFactory解析配置文档
BeanFactory beanfactory = new XmlBeanFactory(res);
HelloWorld hello = (HelloWorld)beanfactory.getBean("helloworld");
// 输出bean在配置文档中设定的内容
System.out.println("HelloWorld:msg="+hello.getMsg());
3.使用ApplicationContext来管理bean
ApplicationContext建立在BeanFactory之上,并增加了其他功能,例如对于国际化的支持,获取资源,时间传递等。一般来所,ApplicationContext是BeanFactory的超集,任何BeanFactory功能同样也适用于ApplicationContext。
代码
ApplicationContext ac = new FileSystemXmlApplicationContext("/WEB-INF/config.xml");
HelloWorld hello = (HelloWorld)ac.getBean("helloworld");
System.out.println("HelloWorld:msg="+hello.getMsg());
3种管理Bean的方式的比较
BeanWrapper不使用xml配置文件。而且只能对单个的bean进行设定。因此在实际编程中不常用。
常用的是BeanFactory和ApplicationContext。因为ApplicationContext是BeanFactory的超集。
ApplicationContext应用的则更多。