spring容器BeanFactory簡單例子

在Spring中,那些組成你應用程序的主體及由Spring Ioc容器所管理的對象,都被稱之爲bean。簡單來說,bean就是Spring容器的初始化、配置及管理的對象。除此以外,bean就與應用程序中的其餘對象沒有什麼區別了。而bean定義以及bean相互間的依賴關係將經過配置元數據來描述。java

BeanFactory是Spring Ioc容器的實際表明者,Ioc容器負責容納此前所描述的bean,並對bean進行管理。spring

在Spring中,BeanFacyory是Ioc容器的核心接口。它的職責包括:實例化、定位、配置應用程序中的對象及創建這些對象間的依賴。緩存

Spring中有兩種容器:maven

  ① BeanFactory 一個最簡單的Spring容器,給依賴注入(DI)提供了基礎的支持。函數

  ② ApplicationContext 此容器添加以一些企業須要用到的東西,更加全面。它包含了BeanFactory容器中的東西。測試

Spring爲咱們提供了許多易用的BeanFactory實現,其中DefaultListableBeanFactory是整個bean加載的核心部分,是Spring註冊及加載bean的默認實現。this

DefaultListableBeanFactory的相關類圖:spa

 

類圖中各個類的做用:code

  • AliasRegistry:定義對alias的簡單增刪改等操做
  • SimpleAliasRegistry:主要使用map做爲alias的緩存,並對接口AliasRegistry進行實現
  • SingletonBeanRegistry:定義對單例的註冊及獲取
  • BeanFactory:定義獲取bean及bean的各類屬性
  • DefaultSingletonBeanRegistry:對接口SingletonBeanRegistry各函數的實現
  • HierarchicalBeanFactory:繼承BeanFactory,也就是在BeanFactory定義的功能的基礎上增長了對parentFactory的支持
  • BeanDefinitionRegistry:定義對BeanDefinition的各類增刪改操做
  • FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基礎上增長了對FactoryBean的特殊處理功能
  • ConfigurableBeanFactory:提供配置Factory的各類方法
  • ListableBeanFactory:根據各類條件獲取bean的配置清單
  • AbstractBeanFactory:綜合FactoryBeanRegistrySupport和ConfigurationBeanFactory的功能
  • AutowireCapableBeanFactory:提供建立bean、自動注入、初始化以及應用bean的後處理器
  • AbstractAutowireCapableBeanFactory:綜合AbstractBeanFactory並對接口AutowireCapableBeanFactory進行實現
  • ConfigurableListableBeanFactory:BeanFactory配置清單,指定忽略類型及接口等

直接使用DefaultListableBeanFactory例子:xml

新建一個maven工程,引用spring相關包。

定義一個xml配置bean文件,beanXMLTest.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.xsd">
    <bean id="testBean" class="com.test.TestBean"/>
</beans>

定義一個bean,TestBean.java的實現

package com.test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class TestBean {
    public String showMsg;

    public String getShowMsg() {
        return showMsg;
    }

    public void setShowMsg(String showMsg) {
        this.showMsg = showMsg;
    }

    public static void main(String[] args) {
        Resource resource = new ClassPathResource("beanXMLTest.xml");
        BeanFactory fa = new DefaultListableBeanFactory();
        BeanDefinitionReader bdr = new XmlBeanDefinitionReader((BeanDefinitionRegistry) fa);
        bdr.loadBeanDefinitions(resource);
        TestBean bean = (TestBean)fa.getBean("testBean");
        bean.setShowMsg("測試消息");
        System.out.println(bean.getShowMsg());
    }
}

運行main方法,獲得打印結果

說明正確的獲取到了bean。

 還能夠使用其它ClassPathXmlApplicationContext、AnnotationConfigApplicationContext、 AnnotationConfigWebApplicationContext、FileSystemApplicationContext等這些容器。

相關文章
相關標籤/搜索