亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Spring BeanFactory和FactoryBean區別解析

瀏覽:57日期:2023-09-18 15:01:08

BeanFactory接口:

IoC容器的頂級接口,是IoC容器的最基礎實現,也是訪問Spring容器的根接口,負責對bean的創建,訪問等工作。

其實在容器的初始化的時候,會對BeanFactory做很多事情,如:

obtainFreshBeanFactory();獲取BeanFactory;

prepareBeanFactory(beanFactory);BeanFactory的預準備工作(BeanFactory進行一些設置)

postProcessBeanFactory(beanFactory);BeanFactory準備工作完成后進行的后置處理工作;

invokeBeanFactoryPostProcessors(beanFactory);執行BeanFactoryPostProcessor的方法;

BeanFactoryPostProcessor:BeanFactory的后置處理器。在BeanFactory標準初始化之后執行的;

FactoryBean接口:

可以返回bean的實例的工廠bean,通過實現該接口可以對bean進行一些額外的操作,例如根據不同的配置類型返回不同類型的bean,簡化xml配置等。在使用上也有些特殊,BeanFactory接口中有一個字符常量String FACTORY_BEAN_PREFIX = '&'; 當我們去獲取BeanFactory類型的bean時,如果beanName不加&則獲取到對應bean的實例;

如果beanName加上&,則獲取到BeanFactory本身的實例;FactoryBean接口對應Spring框架來說占有重要的地位,Spring本身就提供了70多個FactoryBean的實現。他們隱藏了實例化一些復雜的細節,給上層應用帶來了便利。從Spring3.0開始,FactoryBean開始支持泛型。

代碼展示:

//創建一個Spring定義的FactoryBeanpublic class ColorFactoryBean implements FactoryBean<Color> { //返回一個Color對象,這個對象會添加到容器中 @Override public Color getObject() throws Exception { // TODO Auto-generated method stub System.out.println('ColorFactoryBean...getObject...'); return new Color(); } @Override public Class<?> getObjectType() { // TODO Auto-generated method stub return Color.class; } //是單例? //true:這個bean是單實例,在容器中保存一份 //false:多實例,每次獲取都會創建一個新的bean; @Override public boolean isSingleton() { // TODO Auto-generated method stub return false; }}

public class Color { private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return 'Color [car=' + car + ']'; } }

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:context='http://www.springframework.org/schema/context' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd'> <bean class='spring2.ColorFactoryBean'></bean></beans>

測試類:

public class Test1 { ClassPathXmlApplicationContext xmlBeanFactory = null; @Before public void initXmlBeanFactory() { System.out.println('n========測試方法開始=======n'); xmlBeanFactory = new ClassPathXmlApplicationContext('spring3.xml'); } @After public void after() { System.out.println('n========測試方法結束=======n'); } @Test public void test8() { System.out.println(xmlBeanFactory.getBean('colorFactoryBean')); System.out.println('==================='); System.out.println(xmlBeanFactory.getBean('&colorFactoryBean'));}}

測試結果:

========測試方法開始=======十二月 09, 2019 4:49:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2e5c649: startup date [Mon Dec 09 16:49:52 CST 2019]; root of context hierarchy十二月 09, 2019 4:49:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [spring3.xml]ColorFactoryBean...getObject...Color [car=null]===================spring2.ColorFactoryBean@6ddf90b0========測試方法結束=======

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 精品一区二区三区在线观看 | 99国产精品免费视频观看 | 91精品天美精东蜜桃传媒免费 | 麻豆国产精品入口免费观看 | 亚洲va老文色欧美黄大片人人 | 国产大尺度吃奶无遮无挡网 | 成人禁在线观看 | 国产成人亚洲精品无广告 | 免费一级欧美片在线观免看 | 欧洲做视频在线观看 | 亚洲欧洲精品国产区 | 亚洲国产成人手机在线电影bd | 99热久久这里只精品国产www | 亚洲综合第一欧美日韩中文 | 在线精品亚洲 | 亚洲国产精品网站久久 | 伊人影院中文字幕 | 国产一级高清视频免费看 | 日韩欧美视频在线 | 一级日韩一级欧美 | xvideos亚洲入口地址 | 国内在线网友露脸自拍 | 香蕉97碰碰视频免费 | 色欧美在线视频 | 任你操网站 | 亚洲精品久久久久久久777 | 欧美一区二区三区gg高清影视 | 日韩欧美一级毛片视频免费 | 欧美在线观看一区二区三区 | 成人福利网址永久在线观看 | 性感美女在线喷水 | 日本特黄特色免费大片 | 久久久久女人精品毛片 | 中文福利视频 | 色综合久久夜色精品国产 | 国产黄色自拍 | 亚欧成人一区二区 | bdsm中国精品调教 | 国产精彩视频在线 | 成人a毛片 | 国产精品特黄一级国产大片 |