真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring核心接口InitializingBean怎么應用

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

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

 *

 *

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).

*

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也可以清楚的理解該方法是在屬性設置后才調用的。

二、源碼分析接口應用

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

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

throws Throwable {

//判斷該bean是否實現(xiàn)了實現(xiàn)了InitializingBean接口,如果實現(xiàn)了InitializingBean接口,則調用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() {

public Object run() throws Exception {

//調用afterPropertiesSet

((InitializingBean) bean).afterPropertiesSet();

return null;

}

}, getAccessControlContext());

}

catch (PrivilegedActionException pae) {

throw pae.getException();

}

}

else {

//調用afterPropertiesSet

((InitializingBean) bean).afterPropertiesSet();

}

}

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

String initMethodName = mbd.getInitMethodName();

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

!mbd.isExternallyManagedInitMethod(initMethodName)) {

//反射調用init-method方法

invokeCustomInitMethod(beanName, bean, mbd);

}

}

}

分析代碼可以了解:

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

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

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

三、接口應用

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

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配置文件:

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怎么應用”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Spring核心接口InitializingBean怎么應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


網(wǎng)頁標題:Spring核心接口InitializingBean怎么應用
URL鏈接:http://weahome.cn/article/igjcpc.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部