Spring入门之两个bean容器的介绍

时间:2021-03-21 20:31:02

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 -->
<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 -->
<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());
}
}



转载来源:

Spring的IoC容器-Spring BeanFactory容器
BeanFactory和ApplicationContext的介绍