BeanFactory容器
在Spring中,有大量对BeanFactory接口的实现。其中,最常被使用的是XmlBeanFactory类。这个容器从一个XML文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。
在资源宝贵的移动设备或者基于applet的应用当中, BeanFactory会被优先选择。否则,一般使用的是ApplicationContext,除非你有更好的理由选择BeanFactory。
BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身, BeanFactory 是类的通用工厂,它可以创建并管理各种类的对象
BeanFactory的初始化顺序:
1.创建配置文件
2.装载配置文件
3.启动Ioc容器
4.获取bean实例
通过 BeanFactory 启动 IoC 容器时,并不会初始化配置文件中定义的 Bean,初始化动作发生在第一个调用的时候
对于单实例的 Bean 来说,BeanFactory 会缓存 Bean 实例,所以第二次使用 getBean() 方法时就可以直接从 IoC 容器的缓存中获取 Bean 实例
BeanFactory容器的使用示例:
第一步利用框架提供的XmlBeanFactory() API去生成工厂bean以及利用ClassPathResource() API去加载在路径CLASSPATH下可用的bean配置文件。XmlBeanFactory() API负责创建并初始化所有的对象,即在配置文件中提到的bean。
第二步利用第一步生成的bean工厂对象的getBean()方法得到所需要的bean。 这个方法通过配置文件中的bean ID来返回一个真正的对象,该对象最后可以用于实际的对象。一旦得到这个对象,就可以利用这个对象来调用任何方法。
实现代码
bean类:
public class HelloSpring {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
beans.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="hello" class="org.spring.test.HelloSpring">
<property name="message" value="成兮"></property>
</bean>
</beans>
测试主程序
public class TestMain {
//BeanFactory容器测试
public static void main(String[] args){
XmlBeanFactory beanfac = new XmlBeanFactory(new ClassPathResource("beans.xml"));
HelloSpring test = beanfac.getBean("hello",HelloSpring.class);
System.out.println(test.getMessage());
}
}
在初始化 BeanFactory 时必须为其提供一种日志框架,一般使用 Log4J,即在类路径下提供 Log4J 的配置文件,这样,启动 Spring 容器时才不会报错
ApplicationContext容器
ApplicationContext 建立在 BeanFactory 基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用
一般称 BeanFactory 为 IoC 容器,而称 ApplicationContext 为 应用上下文
ApplciationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext,而非底层的 BeanFactory
BeanFactory 在初始化容器时,并未实例化 Bean,直到第一次访问某个Bean 时才实例目标 Bean,而 ApplicationContext 则在初始化应用上下文时就实例化所有单实例的 Bean
ApplicationContext容器的两种常用实现类:
ClassPathXmlApplicationContext: 从类路径中加载配置文件
FileSystemXmlApplicationContext:从文件系统中加载配置文件
ApplicationContext容器的使用实例:
bean类:
public class HelloSpring {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
beans.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="hello" class="org.spring.test.HelloSpring">
<property name="message" value="成兮"></property>
</bean>
</beans>
测试主程序
public class TestMain {
//ApplicationContext容器测试
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloSpring test = beanfac.getBean("hello",HelloSpring.class);
System.out.println(test.getMessage());
}
}
转载来源: