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

Spring中的InitializingBean接口的使用

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

網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站設(shè)計、做網(wǎng)站收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了十多年的創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司。

測試,如下:

import org.springframework.beans.factory.InitializingBean;
public class TestInitializingBean implements InitializingBean{
  @Override
  public void afterPropertiesSet() throws Exception {
    System.out.println("ceshi InitializingBean");    
  }
  public void testInit(){
    System.out.println("ceshi init-method");    
  }
}

配置文件

<bean id="testInitializingBean" class="com.TestInitializingBean" ></bean>

Main函數(shù)如下

public class Main {
  public static void main(String[] args){
    ApplicationContext context = new FileSystemXmlApplicationContext("/src/main/java/com/beans.xml");
  }
}

測試結(jié)果為:

ceshi InitializingBean

這說明在spring初始化bean的時候,如果bean實現(xiàn)了InitializingBean接口,會自動調(diào)用afterPropertiesSet方法。

那么問題來了,在配置bean的時候使用init-method配置也可以為bean配置初始化方法,那這兩個哪個會先執(zhí)行呢,接下來測試一下,修改配置文件,加上init-method:

<bean id="testInitializingBean" class="com.TestInitializingBean" init-method="testInit"></bean>

運行程序,得出結(jié)果:

ceshi InitializingBean
ceshi init-method

從結(jié)果可以看出,在Spring初始化bean的時候,如果該bean實現(xiàn)了InitializingBean接口,并且同時在配置文件中指定了init-method,系統(tǒng)則是先調(diào)用afterPropertieSet()方法,然后再調(diào)用init-method中指定的方法。

那么這種方式在spring中是怎么實現(xiàn)的呢,通過查看Spring加載bean的源碼類AbstractAutowiredCapableBeanFactory可以看出其中的奧妙,AbstractAutowiredCapableBeanFactory類中的invokeInitMethods說的非常清楚,如下:

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) {
    String initMethodName = mbd.getInitMethodName();
    //判斷是否指定了init-method方法,如果指定了init-method方法,則再調(diào)用制定的init-method
    if (initMethodName != null && !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&
        !mbd.isExternallyManagedInitMethod(initMethodName)) {
      //進一步查看該方法的源碼,可以發(fā)現(xiàn)init-method方法中指定的方法是通過反射實現(xiàn)
      invokeCustomInitMethod(beanName, bean, mbd);
    }
  }
}

總結(jié):

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指定的方法。

Spring InitializingBean的作用

Spring的InitializingBean接口有很好的用處,位于spring beans中,它只提供一個方法afterPropertiesSet(),當你實現(xiàn)了該方法后,spring就會對你提供框架級的支持:當你通過sring容器生產(chǎn)出實現(xiàn)了該接口的類的實例后,它就會調(diào)用afterPropertiesSet方法,通過這個方法,你可以檢查你的bean是否正確地被初始化了.當然,你也可以用init-method方法.這兩種方式可以同時使用,調(diào)用的順序為init-method后調(diào)用.

總結(jié)

以上所述是小編給大家介紹的Spring中的InitializingBean接口的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!

網(wǎng)站題目:Spring中的InitializingBean接口的使用
URL鏈接:http://aaarwkj.com/article26/pesicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、網(wǎng)站策劃電子商務(wù)、App設(shè)計、網(wǎng)頁設(shè)計公司標簽優(yōu)化

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)
国产高清av免费在线播放| 亚洲av乱码一区二区三| 日韩精品亚洲专区在线观看| 中文字幕一区二区三区精彩视频| 色综合色很天天综合色| 夫妻性生活免费的视频| 亚洲午夜经典一区二区日韩| 禁区正片免费看完整国产| 亚洲一区二区实拍偷拍视频| 亚洲国产视频不卡一区| 热久久这里只有精品网址| 99精品国产一区二区青青性色| 日韩在线国产精品视频| 天堂网av高清在线播放| 色爱区偷拍人妻中文字幕| 亚州精品少妇久久久久久| 国产高清不卡一二三区| 日韩成人午夜视频在线| 日韩在线一区二区视频| 日本加勒比中文在线观看| 亚洲天堂福利视频网站| 高清偷自拍亚洲精品三区| 久久综合午夜福利视频| 99热免费精品在线观看| 亚洲精品一区av在线观看| 久久久久精品激情三级| 久久se精品一区精品二区国产| 色在色在线播放亚洲中文| 91国内偷拍富婆国内精品对白| 亚洲精品免费一区二区三区| 91精品夜夜夜一区二区| 亚洲中文字幕一区乱码| 中文字幕日韩av综合在线| 欧美三级黄片免费视频| 久久精品色妇熟妇丰满人妻| 美女后入式在线观看| 亚洲综合日韩丝袜人妻| 麻豆国产av巨做国产剧情| 漂亮人妻中文字幕av| 性感91美女白丝在线精品| 国产一区二区日本在线|