BeanFactory 和 ApplicationContext

來源:互聯網
上載者:User

標籤:

  Spring通過一個設定檔描述Bean及Bean直接的依賴關係,利用Java語言的反射功能執行個體化Bean並建立Bean之間的依賴關係。Sprig的IoC容器在完成這些底層工作的基礎上,還提供了Bean執行個體緩衝、生命週期管理、Bean執行個體代理、事件發布、資源裝載等進階服務。

    Bean工廠(com.springframework.beans.factory.BeanFactory)是Spring架構最核心的介面,它提供了進階IoC的配置機制。BeanFactory使管理不同類型的Java對象成為可能,應用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基礎之上,提供了更多面嚮應用的功能,它提供了國際化支援和架構事件體系,更易於建立實際應用。我們一般稱BeanFactory為IoC容器,而稱 ApplicationContext為應用上下文。但有時為了行文方便,我們也將ApplicationContext稱為Spring容器。    BeanFactory是Spring架構的基礎設施,面向Spring本身;ApplicationContext面向使用Spring架構的開發人員,幾乎所有的應用場合都直接使用ApplicationContext而非底層的BeanFactory。  1、初始化BeanFactory 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"       xmlns:p="http://www.springframework.org/schema/p"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <bean id="car" class="com.reflect.Car"          p:brand="邁銳寶"          p:color="黑色"          p:maxSpeed="300"/></beans>

 

BeanFactoryTest:

package com.beanfactory;import com.reflect.Car;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import java.io.IOException;/** * Created by gao on 16-3-18. */public class BeanFactoryTest {    public static void main(String[] args) throws IOException {        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        Resource res = resolver.getResource("classpath:beans.xml");        BeanFactory bf = new XmlBeanFactory(res);        System.out.println("init BeanFactory.");        Car car = bf.getBean("car", Car.class);        System.out.println("car bean is ready for use!");    }}

 

在初始化BeanFactory時,必須為其提供一種日誌架構,我們使用Log4J,即在類路徑下提供Log4J設定檔,這樣啟動Spring容器才不會報錯。 log4j.properties
log4j.rootLogger=INFO,A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
測試輸出:2016-03-18 17:19:27,045  INFO [main] (XmlBeanDefinitionReader.java:315) - Loading XML bean definitions from class path resource [beans.xml]init BeanFactory.car bean is ready for use!   2、ApplicationContext    ApplicationContext使用ClassPathXmlApplicationContext和FileSystemXMLApplicationContext,前者預設從類路徑下載入設定檔,後者預設從檔案系統中裝載設定檔。在擷取ApplicationContext執行個體後,就可以像BeanFactory一樣調用getBean(beanName)返回Bean了。BeanFactory在初始化容器時,並未執行個體化Bean,直到第一次訪問某個Bean時才執行個體目標Bean;而ApplicationContext則在初始化應用上下文時就執行個體化所以單一實例的Bean。 Beans:
package com.context;import com.reflect.Car;import org.springframework.beans.factory.annotation.Configurable;import org.springframework.context.annotation.Bean;/** * Created by gao on 16-3-18. */@Configurablepublic class Beans {    @Bean(name = "car")    public Car buildCar() {        Car car = new Car();        car.setBrand("英菲迪尼");        car.setMaxSpeed(300);        return car;    }}

 

AnnotationApplicationContext:

package com.context;import com.reflect.Car;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * Created by gao on 16-3-18. */public class AnnotationApplicationContext {    public static void main(String[] args) {        ApplicationContext ctx = new AnnotationConfigApplicationContext(Beans.class);        Car car = ctx.getBean("car", Car.class);        System.out.println(car.getBrand());        System.out.println(car.getMaxSpeed());    }}

 

 

 

        

BeanFactory 和 ApplicationContext

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.