亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring中的InitializingBean接口的使用

2024-07-14 08:40:14
字體:
來源:轉載
供稿:網友

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

測試,如下:

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函數如下

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

測試結果為:

ceshi InitializingBean

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

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

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

運行程序,得出結果:

ceshi InitializingBean
ceshi init-method

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

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

protected void invokeInitMethods(String beanName, final Object bean, RootBeanDefinition mbd) throws Throwable {  //判斷該bean是否實現了實現了InitializingBean接口,如果實現了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<Object>() {          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) {    String initMethodName = mbd.getInitMethodName();    //判斷是否指定了init-method方法,如果指定了init-method方法,則再調用制定的init-method    if (initMethodName != null && !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&        !mbd.isExternallyManagedInitMethod(initMethodName)) {      //進一步查看該方法的源碼,可以發現init-method方法中指定的方法是通過反射實現      invokeCustomInitMethod(beanName, bean, mbd);    }  }}

總結:

1、Spring為bean提供了兩種初始化bean的方式,實現InitializingBean接口,實現afterPropertiesSet方法,或者在配置文件中通過init-method指定,兩種方式可以同時使用。

2、實現InitializingBean接口是直接調用afterPropertiesSet方法,比通過反射調用init-method指定的方法效率要高一點,但是init-method方式消除了對spring的依賴。

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

Spring InitializingBean的作用

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

總結

以上所述是小編給大家介紹的Spring中的InitializingBean接口的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线观看一区| 国产精品第3页| 欧美黄色www| 在线观看不卡av| 午夜精品蜜臀一区二区三区免费| 欧美精品一区二区三区国产精品| 欧美日韩午夜视频在线观看| 亚洲欧洲日产国码av系列天堂| 97高清免费视频| 日韩免费精品视频| 午夜精品久久久久久99热| 在线亚洲欧美视频| 成人网址在线观看| 日本老师69xxx| 久热精品视频在线免费观看| 久久久久久久久久久网站| 亚洲美女喷白浆| 最近2019好看的中文字幕免费| 欧美色xxxx| 亚洲系列中文字幕| 日韩视频免费中文字幕| 欧美一区二区三区图| 亚洲国产又黄又爽女人高潮的| 高清亚洲成在人网站天堂| 日韩视频免费中文字幕| 美女av一区二区| 欧美日韩视频免费播放| 久久精品视频导航| 狠狠做深爱婷婷久久综合一区| 国产成+人+综合+亚洲欧洲| 日本亚洲欧洲色| 色www亚洲国产张柏芝| 久久av红桃一区二区小说| 国产精品黄页免费高清在线观看| 91久久久久久| 欧美在线影院在线视频| 久久久久日韩精品久久久男男| 国产美女直播视频一区| 精品亚洲夜色av98在线观看| 91精品久久久久久| 日韩精品免费在线观看| 色悠悠久久88| 久久精品91久久久久久再现| 欧美理论电影在线播放| 亚洲电影在线观看| 欧美洲成人男女午夜视频| 久久国产精品久久国产精品| 欧美激情videoshd| 欧美日韩国产中文精品字幕自在自线| 亚洲精品欧美日韩专区| 色偷偷9999www| 成人有码在线视频| 国内精品久久久久久影视8| 国产精品久久久久久久7电影| 日本精品视频网站| 中文字幕欧美日韩va免费视频| 国产免费成人av| 欧洲亚洲免费视频| 国产精品久久久久福利| 国产精品欧美一区二区三区奶水| 欧美精品一区二区三区国产精品| 2019亚洲男人天堂| 美女久久久久久久久久久| 久久精品电影一区二区| 日韩精品在线视频观看| 欧美一区二区大胆人体摄影专业网站| 国产精品青草久久久久福利99| 国产欧美一区二区三区在线看| 亚洲最新av在线| 国产精品网红福利| 亚洲国产欧美一区二区三区久久| 国产精品日韩欧美| 亚洲国产精品99| 国产成人精品综合| 日韩电影在线观看免费| 91夜夜揉人人捏人人添红杏| 久久免费观看视频| 欧美中文字幕视频| 欧美黑人狂野猛交老妇| 亚洲无限av看| 日韩av一区在线观看| 高跟丝袜一区二区三区| 日韩中文字幕国产| 欧美精品在线观看| 亚洲尤物视频网| 国产精品午夜国产小视频| 欧美贵妇videos办公室| 久久伊人精品天天| 亚洲va久久久噜噜噜久久天堂| 日韩av在线天堂网| 亚洲电影成人av99爱色| 国产精品99免视看9| 97精品一区二区三区| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品成人久久电影| 91福利视频网| 欧美午夜影院在线视频| 亚洲欧美日韩一区二区在线| 懂色av中文一区二区三区天美| 亚洲欧美国产精品va在线观看| 亚洲缚视频在线观看| 久久精品国产亚洲| 91影院在线免费观看视频| 国产热re99久久6国产精品| 91社区国产高清| 51色欧美片视频在线观看| 国产极品jizzhd欧美| 日韩中文字幕视频在线观看| 色噜噜久久综合伊人一本| 亚洲国产精品中文| 国产精品精品国产| 欧美日韩福利在线观看| 欧美—级a级欧美特级ar全黄| 美女少妇精品视频| 欧美激情亚洲综合一区| 国模精品一区二区三区色天香| 欧美日韩一区二区在线播放| 日韩少妇与小伙激情| 久久久久成人精品| 亚洲国产精品久久91精品| 久久久噜噜噜久久| 2019中文在线观看| 亚洲第一色在线| 96pao国产成视频永久免费| 亚洲视频999| 97av在线视频免费播放| 亚洲精品中文字幕女同| 精品丝袜一区二区三区| 91精品视频播放| 欧美国产精品日韩| 国产婷婷色综合av蜜臀av| 亚洲视频在线看| 青草青草久热精品视频在线观看| 97精品视频在线播放| 色婷婷成人综合| 国产精品久久久久久久7电影| 国产成人精品久久久| 亚洲欧美www| 亚洲精品白浆高清久久久久久| 欧美中文字幕在线视频| 欧美精品免费看| 中文字幕在线精品| 51午夜精品视频| 国产精品久久久久久亚洲影视| 亚洲精品第一国产综合精品| 亚洲成人av资源网| www.欧美视频| 欧美黑人性猛交| 91嫩草在线视频| 日韩av一卡二卡| 日韩中文字幕在线视频| 91极品女神在线| 久久视频在线直播| 欧美日韩国产91| 成人在线中文字幕| 成人啪啪免费看| 国产成人精品在线| 欧美日韩亚洲精品一区二区三区| 日韩精品免费在线视频观看| 欧美日韩一区二区在线| 久久精品视频中文字幕| 日韩不卡在线观看| 亚洲精品www久久久| 欧美日韩国产区|