一、認識Bean
在Spring中,那些組成應用的主體(backbone)及由Spring IoC容器所管理的對象被稱之為bean。簡單地講,bean就是由Spring容器初始化、裝配及被管理的對象,除此之外,bean就沒有特别之處了(與應用中的其他對象沒有什麼差別)。而bean定義以及bean互相間的依賴關系将通過配置中繼資料來描述。
二、認識BeanFactory
org.springframework.beans.factory.BeanFactory是Spring IoC容器的實際代表者,IoC容器負責容納此前所描述的bean,并對bean進行管理。
BeanFactory負責讀取Bean定義檔案,管理對象的加載、生成、維護Bean對象與Bean對象之間的依賴關系,負責Bean的生命周期,對于簡單的應用程式來說,使用BeanFactory就足夠來管理Bean,在對象的管理上就可以獲得許多的便利性。
BeanFactory是整個Spring圍繞的重點。它負責讀取Bean配置管理。可以借由getBean()方法來擷取Bean的執行個體。
三、ApplicationContext
不過作為一個應用程式架構,隻提供Bean容器管理的功能是不夠的,若要利用Spring所提供的一些特色以及進階的容器功能,則可以使用BeanFactory的子接口ApplicationContext,此接口的基本功能與BeanFactory接口很相似,另外還提供了一個應用程式所需的更完整的架構功能:
1、提供擷取資源檔案的更友善的方法;
2、提供文字消息解析的方法;
3、支援國際化消息;
4、ApplicationContext可以釋出時間,對時間感興趣的Bean可以接收到這些事件。
簡而言之,BeanFactory提供了配制架構及基本功能,而ApplicationContext則增加了更多支援企業核心内容的功能。ApplicationContext完全由BeanFactory擴充而來,因而BeanFactory所具備的能力和行為也适ApplicationContext
Spring的創始者Rod Johnson建議使用ApplicationContext來取代BeanFactory,在實作ApplicationContext的類中,最常使用的大概是一下三個:
org.springframework.context.support.ClassPathXmlApplicationContext
org.springframework.context.support.FileSystemXmlApplicationContext
org.springframework.web.context.support.XmlWebApplicationContext
四、接口選擇之惑
在實際應用中,使用者有時候不知道到底是選擇BeanFactory接口還是ApplicationContext接口。但是通常在建構J2EE應用時,使用ApplicationContext将是更好的選擇,因為它不僅提供了BeanFactory的所有特性,同時也允許使用更多的聲明方式來得到我們想要的功能。
五、Spring的Bean配置
Spring支援三種配置中繼資料格式:XML格式、Java屬性檔案格式或使用Spring公共API程式設計實作。
六、執行個體化Spring Ioc容器
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ClassPathResource resource = new ClassPathResource("beans.xml");
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
// of course, an ApplicationContext is just a BeanFactory
BeanFactory factory = (BeanFactory) context;
七、Spring Demo
注入一個Bean,通過Bean上下文工具擷取Bean對象并輸出其中的屬性。
/**
* Created by IntelliJ IDEA.<br>
* <b>User</b>: leizhimin<br>
* <b>Date</b>: 2008-4-17 16:53:54<br>
* <b>Note</b>: 測試Bean
*/
public class Person {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
public String getAge() {
return age;
public void setAge(String age) {
this.age = age;
}
package com.lavasoft.springnote.ch01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
* <b>Date</b>: 2008-4-18 15:00:46<br>
* <b>Note</b>: Spring上下文工具
public class BeanContextHelper {
private static ApplicationContext applicationContext;
static {
applicationContext = buildApplicationContext();
private BeanContextHelper() {
/**
* 重新建構ApplicationContext對象
* @return ApplicationContext
*/
public static ApplicationContext buildApplicationContext() {
return new ClassPathXmlApplicationContext("applicationContext.xml");
* 擷取一個ApplicationContext對象
public static ApplicationContext getApplicationContext() {
return applicationContext;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="person" class="com.lavasoft.springnote.ch01.Person">
<property name="name">
<value>lavasoft</value>
</property>
<property name="age">
<value>22</value>
</bean>
</beans>
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.FileSystemResource;
* <b>Date</b>: 2008-4-17 16:58:54<br>
* <b>Note</b>: BeanFactory擷取工具(測試版)
public class SpringUtils {
private static SpringUtils _instance = new SpringUtils();
private SpringUtils() {
public static ClassPathXmlApplicationContext getClassPathXmlApplicationContext() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
return context;
public static BeanFactory getBeanFactory() {
Resource rs = new FileSystemResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(rs);
return factory;
* <b>Date</b>: 2008-4-17 16:58:07<br>
* <b>Note</b>: 用戶端測試
public class Test {
public static void main(String args[]) {
Test test = new Test();
test.test3();
// test.test2();
public void test1() {
//bean的配置檔案“/applicationContext.xml”必須位于CLASSPATH下
BeanFactory factory = SpringUtils.getBeanFactory();
Person person = (Person) factory.getBean("person");
System.out.println(person.getName());
System.out.println(person.getAge());
public void test2(){
//bean的配置檔案“/applicationContext.xml”必須位于源碼src下
ApplicationContext context = SpringUtils.getClassPathXmlApplicationContext();
Person person = (Person) context.getBean("person");
public void test3(){
ApplicationContext context = BeanContextHelper.getApplicationContext();
}
運作結果:
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
lavasoft
22
Process finished with exit code 0
本文轉自 leizhimin 51CTO部落格,原文連結:http://blog.51cto.com/lavasoft/73432,如需轉載請自行聯系原作者