1. 程式人生 > >[Java面試題]Spring總結以及在面試中的一些問題.

[Java面試題]Spring總結以及在面試中的一些問題.

    2)Bean的完整生命週期 (十一步驟)【瞭解內容,但是對於spring內部操作理解有一定幫助】

①instantiate bean物件例項化

②populate properties 封裝屬性

③如果Bean實現BeanNameAware 執行 setBeanName

④如果Bean實現BeanFactoryAware 或者 ApplicationContextAware 設定工廠 setBeanFactory 或者上下文物件 setApplicationContext

⑤如果存在類實現 BeanPostProcessor(後處理Bean) ,執行postProcessBeforeInitialization,BeanPostProcessor介面提供鉤子函式,用來動態擴充套件修改Bean。(程式自動呼叫後處理Bean)

publicclassMyBeanPostProcessorimplementsBeanPostProcessor{publicObject postProcessAfterInitialization(Object bean,String beanName)throwsBeansException{System.out.println("第八步:後處理Bean,after初始化。");//後處理Bean,在這裡加上一個動態代理,就把這個Bean給修改了。return bean;//返回bean,表示沒有修改,如果使用動態代理,返回代理物件,那麼就修改了。}publicObject postProcessBeforeInitialization
(Object bean,String beanName)
throwsBeansException{System.out.println("第五步:後處理Bean的:before初始化!!");//後處理Bean,在這裡加上一個動態代理,就把這個Bean給修改了。return bean;//返回bean本身,表示沒有修改。}}注意:這個前處理Bean和後處理Bean會對所有的Bean進行攔截。⑥如果Bean實現InitializingBean 執行 afterPropertiesSet

⑦呼叫<bean init-method="init"> 指定初始化方法 init

⑧如果存在類實現 BeanPostProcessor(處理Bean) ,執行postProcessAfterInitialization

⑨執行業務處理

⑩如果Bean實現 DisposableBean 執行 destroy

⑪呼叫<bean destroy-method="customerDestroy"> 指定銷燬方法 customerDestroy

5.請介紹一下Spring框架中Bean的生命週期和作用域

(1)bean定義

    在配置檔案裡面用<bean></bean>來進行定義。

(2)bean初始化

    有兩種方式初始化:

A.在配置檔案中通過指定init-method屬性來完成

B.實現org.springframwork.beans.factory.InitializingBean介面

(3)bean呼叫

    有三種方式可以得到bean例項,並進行呼叫

(4)bean銷燬

    銷燬有兩種方式

A.使用配置檔案指定的destroy-method屬性

B.實現org.springframwork.bean.factory.DisposeableBean介面

##作用域

singleton

當一個bean的作用域為singleton, 那麼Spring IoC容器中只會存在一個共享的bean例項,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。

prototype

Prototype作用域的bean會導致在每次對該bean請求(將其注入到另一個bean中,或者以程式的方式呼叫容器的getBean() 方法)時都會建立一個新的bean例項。根據經驗,對所有有狀態的bean應該使用prototype作用域,而對無狀態的bean則應該使用 singleton作用域

request

在一次HTTP請求中,一個bean定義對應一個例項;即每次HTTP請求將會有各自的bean例項, 它們依據某個bean定義建立而成。該作用 域僅在基於web的Spring ApplicationContext情形下有效。

session

在一個HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於web的Spring ApplicationContext情形下有效。

global session

在一個全域性的HTTP Session中,一個bean定義對應一個例項。典型情況下,僅在使用portlet context的時候有效。該作用域僅在基於 web的Spring ApplicationContext情形下有效。