再見面試官:你能說說 Spring 框架中 Bean 的生命周期嗎?

2021-01-20 Java基基
首先簡單說一下(以下為一個回答的參考模板)

1、實例化一個Bean--也就是我們常說的new;

2、按照Spring上下文對實例化的Bean進行配置--也就是IOC注入;

3、如果這個Bean已經實現了BeanNameAware接口,會調用它實現的setBeanName(String)方法,此處傳遞的就是Spring配置文件中Bean的id值

4、如果這個Bean已經實現了BeanFactoryAware接口,會調用它實現的setBeanFactory(setBeanFactory(BeanFactory)傳遞的是Spring工廠自身(可以用這個方式來獲取其它Bean,只需在Spring配置文件中配置一個普通的Bean就可以);

5、如果這個Bean已經實現了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文(同樣這個方式也可以實現步驟4的內容,但比4更好,因為ApplicationContext是BeanFactory的子接口,有更多的實現方法);

6、如果這個Bean關聯了BeanPostProcessor接口,將會調用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經常被用作是Bean內容的更改,並且由於這個是在Bean初始化結束時調用那個的方法,也可以被應用於內存或緩存技術;

7、如果Bean在Spring配置文件中配置了init-method屬性會自動調用其配置的初始化方法。

8、如果這個Bean關聯了BeanPostProcessor接口,將會調用postProcessAfterInitialization(Object obj, String s)方法、;

註:以上工作完成以後就可以應用這個Bean了,那這個Bean是一個Singleton的,所以一般情況下我們調用同一個id的Bean會是在內容地址相同的實例,當然在Spring配置文件中也可以配置非Singleton,這裡我們不做贅述。

9、當Bean不再需要時,會經過清理階段,如果Bean實現了DisposableBean這個接口,會調用那個其實現的destroy()方法;

10、最後,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調用其配置的銷毀方法。

結合代碼理解一下1、Bean的定義

Spring通常通過配置文件定義Bean。如:

<?xml version=」1.0″ encoding=」UTF-8″?>

<beans xmlns=」http://www.springframework.org/schema/beans」
xmlns:xsi=」http://www.w3.org/2001/XMLSchema-instance」
xsi:schemaLocation=」http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd」>

<bean id=」HelloWorld」 class=」com.pqf.beans.HelloWorld」>
    <property name=」msg」>
       <value>HelloWorld</value>
    </property>
</bean>

</beans>

這個配置文件就定義了一個標識為 HelloWorld 的Bean。在一個配置文檔中可以定義多個Bean。

2、Bean的初始化

有兩種方式初始化Bean。

1、在配置文檔中通過指定init-method 屬性來完成

在Bean的類中實現一個初始化Bean屬性的方法,如init(),如:

public class HelloWorld{
   public String msg=null;
   public Date date=null;

    public void init() {
      msg=」HelloWorld」;
      date=new Date();
    }
    ……
}

然後,在配置文件中設置init-mothod屬性:

2、實現 org.springframwork.beans.factory.InitializingBean接口

Bean實現InitializingBean接口,並且增加 afterPropertiesSet() 方法:

public class HelloWorld implement InitializingBean {
   public String msg=null;
   public Date date=null;

   public void afterPropertiesSet() {
       msg="向全世界問好!";
       date=new Date();
   }
    ……
}

那麼,當這個Bean的所有屬性被Spring的BeanFactory設置完後,會自動調用afterPropertiesSet()方法對Bean進行初始化,於是,配置文件就不用指定 init-method屬性了。

3、Bean的調用

有三種方式可以得到Bean並進行調用:

1、使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(」msg」,」HelloWorld」);
system.out.println(bw.getPropertyCalue(」msg」));

2、使用BeanFactory
InputStream is=new FileInputStream(」config.xml」);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(」HelloWorld」);
system.out.println(hw.getMsg());

3、使用ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(」config.xml」);
HelloWorld hw=(HelloWorld) actx.getBean(」HelloWorld」);
System.out.println(hw.getMsg());

4、Bean的銷毀1、使用配置文件中的 destory-method 屬性

與初始化屬性 init-methods類似,在Bean的類中實現一個撤銷Bean的方法,然後在配置文件中通過 destory-method指定,那麼當bean銷毀時,Spring將自動調用指定的銷毀方法。

2、實現 org.springframwork.bean.factory.DisposebleBean接口

如果實現了DisposebleBean接口,那麼Spring將自動調用bean中的Destory方法進行銷毀,所以,Bean中必須提供Destory方法。

圖解

相關焦點

  • 面試刷題30:SpringBean的生命周期?
    【華為雲·年終盛典】闖關答題 贏華為平板電腦大禮包 夠膽你就來!>>>
  • 面試刷題:Spring Bean的生命周期?
    spring是Java軟體開發的事實標準。今天的問題是:springBean的生命周期是怎樣的?bean的生命周期完全由spring容器管理,從屬性設置到各種依賴關係的注入,簡化了開發人員對bean的生命周期認知;Spring的容器中Bean生命周期如下對象創建1、從xml配置的Bean
  • 再談Spring中Bean的生命周期
    前言這其實是一道面試題,是我在面試百度的時候被問到的,當時沒有答出來(因為自己真的很菜),後來在網上尋找答案,看到也是一頭霧水,直到看到了《Spring in action》這本書,書上有對Bean聲明周期的大致解釋,但是沒有代碼分析,所以就自己上網尋找資料,一定要把這個Bean生命周期弄明白!
  • java spring boot 面試題 高級 bean 生命周期
    java spring boot 面試題 高級 bean 生命周期過程如下, 核心步驟為如下高亮四步.調用BeanFactoryAware的setBeanFactory方法執行BeanPostProcessor的postProcessBeforeInitialization方法調用Initializ ingBean的afterPropertiesSet方法調用<bean
  • 面試官:給我說說Spring中Bean的生命周期?
    來源:www.jianshu.com/p/70b935f2b3fe在網上已經有跟多Bean的生命周期的博客待會兒使用流程圖,說明以及代碼的形式來說明整個聲明周期的流程。注意因為代碼比較多,這裡的流程圖只畫出了大概的流程,具體的可以深入代碼。# 獲取Bean
  • Java程式設計師必須要知道的Spring框架經典面試題
    spring現在Java的主流框架非Spring莫屬,Spring興起於2003年,spring最初的想法是想讓JAVA EE開發應該更加簡單,為JavaBean提供了一個更好的應用配置框架那麼經歷了10幾年的框架,已經成為了Java的主流框架,並且也有Spring自己體系。面對10幾年主流開發框架,必須要知道的Spring框架面試題你了解多少呢?
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    配置文件中的根標籤是beans,所以配置一定要寫到beans裡面。到目前為止Sping框架就搭建完畢了。下面補充一下Bean元素的屬性scope是範圍的意思,在絕地求生中scope意為瞄準鏡,如果你的隊友是個老外你就和他說 i want this 4times scope他就明白了。在bean中scope表示bean對象的作用域,有兩個選項singlton,和prototype。
  • spring面試題目!
    什麼是spring?Spring框架的設計目標,設計理念,和核心是什麼Spring的優缺點是什麼?Spring有哪些應用場景Spring由哪些模塊組成?Spring 框架中都用到了哪些設計模式?詳細講解一下核心容器(spring context應用上下文) 模塊Spring框架中有哪些不同類型的事件Spring 應用程式有哪些不同組件?使用 Spring 有哪些方式?
  • 面試官:你了解spring嗎?spring的兩大核心是什麼?
    IOC(DI) - 控制反轉(依賴注入)所謂的IOC稱之為控制反轉,簡單來說就是將對象的創建的權利及對象的生命周期的管理過程交由Spring框架來處理,從此在開發過程中不再需要關注對象的創建和生命周期的管理,而是在需要時由Spring框架提供,這個由spring框架管理對象創建和生命周期的機制稱之為控制反轉。
  • Spring 的生命周期
    Spring 的生命周期:粗捏可以分為三個階段,它是有bean的第一次加工,還有bean的第二次加工過程,首先bean的第一次加工,將你的對象實例化,在這實例化的前後,有一個BeanPostProcessor在做前置和後置處理
  • springBoot中Bean的生命周期
    今天主要分享一下Springboot中Bean的生命周期的過程,如有不足,歡迎指正交流。找到了資源就開始解析,並將定義的信息保存起來,此時,並沒有初始化bean,這點需要注意。然後將bean的定義發布到SpringIoc的容器中,此時,SpringIoc的容器中還是沒有Bean的生成。只是定義的信息。
  • 繼「劉強東」之後京東的第二位程式設計師「呂科」spring面試題講解
    面試問題答案及spring常見面試問題答案1、什麼是Spring框架?2、使用Spring框架能帶來些好處?9、請解釋Spring Bean的生命周期?Spring Bean的生命周期簡單易懂。在個bean 實例被初始化時,需要執行- -系列的初始化操作以達到可用的狀態。同樣的,當一個bean不在被調用時需要進行相關的析構操作,並從bean容器中移除。
  • 面試題:如果不用Spring,你打算怎麼做開發工作
    就是這麼一道spring面試題,要是面試官問你,你該如何回答?答案各有千秋,接下來看看網友們是怎麼說的。那麼問題又來了,spring能幹嘛?我們為什麼要用spring呢?用spring有什麼好處?你們都知道麼?什麼是spring?Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的複雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
  • 面試官經常喜歡問的一些關於spring的面試題
    今天和大家分享一些關於spring的面試題1. 談談你對 Spring 的理解Spring 是一個開源框架,為簡化企業級應用開發而生。Spring 可以是使簡單的 JavaBean 實現以前只有 EJB 才能實現的功能。
  • 阿里面試總結:69道必問的spring面試題(附加答案)
    什麼是spring?2. 使用Spring框架的好處是什麼?3. Spring由哪些模塊組成?4. 核心容器(應用上下文) 模塊。5. BeanFactory – BeanFactory 實現舉例。解釋Spring支持的幾種bean的作用域。26. Spring框架中的單例bean是線程安全的嗎?27. 解釋Spring框架中bean的生命周期。28. 哪些是重要的bean生命周期方法? 你能重載它們嗎?29.
  • Spring必須掌握的Bean增強擴展點與加載流程
    Spring Bean擴展點BeanDefinition與BeanFactory擴展生命周期在整個SpringBean生命周期體系中,可以在BeanFactory中可以看到Spring本身對整個體系的約定:
  • Java面試高頻考點:手寫Spring IOC實現機制
    這個「別人」在spring框架中指的就是IOC容器,它負責對象的生命周期和對象之間的關係。Spring IOC的概念以及原理在面試過程中屬於一個被問爛的問題,本篇文章不再過多贅述。我們重點研究一下如何自己實現一個最簡單的Spring IOC。目前注入Bean的方式有兩種,一種是通過編寫XML文件注入,另一種是通過註解注入。
  • Java中最強大的框架spring
    感謝你的觀看,謝謝你。今天學習內容安排如下:對ssm框架有一個了解。IoC控制反轉的xml配置管理,這也就是spring框架的核心知識點之一。前面學過的jdbc、jdbcTemplate、mybatis都是和這層是相關的,SSH框架中的hibernate,還有後續要學的SpringDateJPA都是。而我們今天要學的spring框架也就對應著業務層:無論是SSM框架還是SSH框架都有Spring,足以證明其重要性。
  • spring中都有什麼作用域的bean
    如果問spring中都有什麼作用域的bean、相信很多人都會回答「單例」,對的,如果這樣你只回答了一種。spring中默認所有的bean都是作為單例(singleton)的形式創建的。不管bean被注入到其他的bean多少次,每次注入的都是同一個實例。
  • Java面試中常問的Spring方面問題(涵蓋七大方向共55道題,含答案)
    Spring Framework 現在幾乎已成為 Java Web 開發的標配框架。那麼,作為 Java 程式設計師,你對 Spring 的主要技術點又掌握了多少呢?不妨用本文的問題來檢測一下。容器 - Spring 負責創建和管理對象(Bean)的生命周期和配置。MVC - 對 web 應用提供了高度可配置性,其他框架的集成也十分方便。事務管理 - 提供了用於事務管理的通用抽象層。Spring 的事務支持也可用於容器較少的環境。