内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Spring核心接口InitializingBean怎么應(yīng)用

這篇文章主要講解了“Spring核心接口InitializingBean怎么應(yīng)用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring核心接口InitializingBean怎么應(yīng)用”吧!

創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元西安做網(wǎng)站,已為上家服務(wù),為西安各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

一、InitializingBean接口說明

InitializingBean接口為bean提供了屬性初始化后的處理方法,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在bean的屬性初始化后都會執(zhí)行該方法。

package org.springframework.beans.factory;

/**

 * Interface to be implemented by beans that need to react once all their

 * properties have been set by a BeanFactory: for example, to perform custom

 * initialization, or merely to check that all mandatory properties have been set.

 *

 * <p>An alternative to implementing InitializingBean is specifying a custom

 * init-method, for example in an XML bean definition.

 * For a list of all bean lifecycle methods, see the BeanFactory javadocs.

 *

 * @author Rod Johnson

 * @see BeanNameAware

 * @see BeanFactoryAware

 * @see BeanFactory

 * @see org.springframework.beans.factory.support.RootBeanDefinition#getInitMethodName

 * @see org.springframework.context.ApplicationContextAware

 */

public interface InitializingBean {

/**

* Invoked by a BeanFactory after it has set all bean properties supplied

* (and satisfied BeanFactoryAware and ApplicationContextAware).

* <p>This method allows the bean instance to perform initialization only

* possible when all bean properties have been set and to throw an

* exception in the event of misconfiguration.

* @throws Exception in the event of misconfiguration (such

* as failure to set an essential property) or if initialization fails.

*/

void afterPropertiesSet() throws Exception;

}

從方法名afterPropertiesSet也可以清楚的理解該方法是在屬性設(shè)置后才調(diào)用的。

二、源碼分析接口應(yīng)用

通過查看spring的加載bean的源碼類(AbstractAutowireCapableBeanFactory)可以看到

protected void invokeInitMethods(String beanName, final Object bean, RootBeanDefinition mbd)

throws Throwable {

//判斷該bean是否實現(xiàn)了實現(xiàn)了InitializingBean接口,如果實現(xiàn)了InitializingBean接口,則調(diào)用bean的afterPropertiesSet方法

boolean isInitializingBean = (bean instanceof InitializingBean);

if (isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod("afterPropertiesSet"))) {

if (logger.isDebugEnabled()) {

logger.debug("Invoking afterPropertiesSet() on bean with name '" + beanName + "'");

}

if (System.getSecurityManager() != null) {

try {

AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {

public Object run() throws Exception {

//調(diào)用afterPropertiesSet

((InitializingBean) bean).afterPropertiesSet();

return null;

}

}, getAccessControlContext());

}

catch (PrivilegedActionException pae) {

throw pae.getException();

}

}

else {

//調(diào)用afterPropertiesSet

((InitializingBean) bean).afterPropertiesSet();

}

}

if (mbd != null) { //判斷是否指定了init-method方法,如果指定了init-method方法,則再調(diào)用制定的init-method

String initMethodName = mbd.getInitMethodName();

if (initMethodName != null && !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&

!mbd.isExternallyManagedInitMethod(initMethodName)) {

//反射調(diào)用init-method方法

invokeCustomInitMethod(beanName, bean, mbd);

}

}

}

分析代碼可以了解:

1:spring為bean提供了兩種初始化bean的方式,實現(xiàn)InitializingBean接口,實現(xiàn)afterPropertiesSet方法,或者在配置文件中同過init-method指定,兩種方式可以同時使用

2:實現(xiàn)InitializingBean接口是直接調(diào)用afterPropertiesSet方法,比通過反射調(diào)用init-method指定的方法效率相對來說要高點。但是init-method方式消除了對spring的依賴

3:如果調(diào)用afterPropertiesSet方法時出錯,則不調(diào)用init-method指定的方法。

三、接口應(yīng)用

   InitializingBean接口在spring框架中本身就很多應(yīng)用,這就不多說了。我們在實際應(yīng)用中如何使用該接口呢?

1、使用InitializingBean接口處理一個配置文件:

import java.io.File;

import java.io.FileInputStream;

import java.util.Properties;

import org.springframework.beans.factory.InitializingBean;

public class ConfigBean implements InitializingBean{

//微信公眾號配置文件

private String configFile;

private String appid;

private String appsecret;

public String getConfigFile() {

return configFile;

}

public void setConfigFile(String configFile) {

this.configFile = configFile;

}

public void afterPropertiesSet() throws Exception {

if(configFile!=null){

File cf = new File(configFile);

if(cf.exists()){

Properties pro = new Properties();

pro.load(new FileInputStream(cf));

appid = pro.getProperty("wechat.appid");

appsecret = pro.getProperty("wechat.appsecret");

}

}

System.out.println(appid);

System.out.println(appsecret);

}

}

2、配置

spring配置文件:

<bean id="configBean" class="com.ConfigBean">

<property name="configFile" value="d:/wechat.properties"></property>

</bean>

wechat.properties配置文件

wechat.appid=wxappid

wechat.appsecret=wxappsecret

3、測試

     public static void main(String[] args) throws Exception {

         String config = Test.class.getPackage().getName().replace('.', '/') + "/bean.xml";

           ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config);

           context.start();

        }

感謝各位的閱讀,以上就是“Spring核心接口InitializingBean怎么應(yīng)用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Spring核心接口InitializingBean怎么應(yīng)用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文題目:Spring核心接口InitializingBean怎么應(yīng)用
瀏覽路徑:http://m.rwnh.cn/article32/igjcpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、定制網(wǎng)站網(wǎng)站制作、服務(wù)器托管、微信公眾號、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
高尔夫| 珠海市| 济源市| 丽江市| 高雄县| 荥阳市| 台中县| 莱阳市| 苗栗县| 阳信县| 博乐市| 长兴县| 化州市| 邹平县| 营山县| 普兰店市| 肃宁县| 冷水江市| 抚松县| 安达市| 芒康县| 万荣县| 筠连县| 临沧市| 南开区| 乌审旗| 汝城县| 巨鹿县| 霍城县| 教育| 华池县| 凌云县| 彩票| 禄丰县| 曲靖市| 柯坪县| 星子县| 丹寨县| 纳雍县| 武强县| 宁陕县|