欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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://aaarwkj.com/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)站
校花出白浆视频一区二区三区| 国产精品五月婷婷六月丁香| 四虎影视国产精品久久| 欧美一区二区日韩一区二区| 亚洲综合中文字幕经典av在线 | 日韩蜜桃av一二三四区| 正在播放日韩黄色精品| 欧美亚洲国产青草久久| 亚洲精品日韩一区二区| 精品国产亚洲av剧情| 日本久久91跳蛋视频| 久章草在线免费视频播放| 午夜在线观看欧美福利| 亚洲精品午夜久久久伊人| 麻豆精品情欲人妻二区| 日本精品一区二区三区免费| 免费国产网站在线观看不卡| 亚洲欧美日韩伦理一区| 精精国产xxxx视频在线不卡| 精品人妻一区二区四区| 福利午夜福利在线观看| 2018在线不卡爱视频| 久久成人午夜免费电影| 日本一区二区精美视频| 亚洲成人久久久av一区| 日本大片在线一区二区三区| 青青草原综合视频在线| 国产av综合一区二区三区最新 | 久草区免费在线视频播放| 蜜臀人妻四季av一区二区不卡| 97国产精品亚洲精品| 亚洲国产成人不卡高清麻豆| 国产日韩欧在线视频| 伊人激情一区二区三区| 人妻免费精品久久一区| 国产自拍成人精品视频| 日韩黄片大全在线观看| 中文字幕乱码日韩一区| 欧美精品一区二区精品久久| 日韩国产欧美亚洲一区| 91麻豆亚洲国产成人久久|