Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...
1.什么是Spring beans?
Spring beans 是那些形成Spring應(yīng)用的主干的java對象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過容器中配置的元數(shù)據(jù)創(chuàng)建。比如,以XML文件中 的形式定義。
Spring 框架定義的beans都是單件beans。在bean tag中有個(gè)屬性”singleton”,如果它被賦為TRUE,bean 就是單件,否則就是一個(gè) prototype bean。默認(rèn)是TRUE,所以所有在Spring框架中的beans 缺省都是單件。
2. 一個(gè) Spring Bean 定義 包含什么?
一個(gè)Spring Bean 的定義包含容器必知的所有配置元數(shù)據(jù),包括如何創(chuàng)建一個(gè)bean,它的生命周期詳情及它的依賴。
3. 如何給Spring 容器提供配置元數(shù)據(jù)?
這里有三種重要的方法給Spring 容器提供配置元數(shù)據(jù)。
XML配置文件。
基于注解的配置。
基于java的配置。
4. 你怎樣定義類的作用域?
當(dāng)定義一個(gè) 在Spring里,我們還能給這個(gè)bean聲明一個(gè)作用域。它可以通過bean 定義中的scope屬性來定義。如,當(dāng)Spring要在需要的時(shí)候每次生產(chǎn)一個(gè)新的bean實(shí)例,bean的scope屬性被指定為prototype。另一方面,一個(gè)bean每次使用的時(shí)候必須返回同一個(gè)實(shí)例,這個(gè)bean的scope 屬性 必須設(shè)為 singleton。
5. 解釋Spring支持的幾種bean的作用域
Spring框架支持以下五種bean的作用域:
singleton : bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。
prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
request:每次http請求都會創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
session:在一個(gè)HTTP Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
global-session:在一個(gè)全局的HTTP Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的作用域是Singleton。
6. Spring框架中的單例bean是線程安全的嗎?
不,Spring框架中的單例bean不是線程安全的。
7. 解釋Spring框架中bean的生命周期
Spring容器 從XML 文件中讀取bean的定義,并實(shí)例化bean。
Spring根據(jù)bean的定義填充所有的屬性。
如果bean實(shí)現(xiàn)了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。
如果Bean 實(shí)現(xiàn)了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。
如果有任何與bean相關(guān)聯(lián)的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內(nèi)調(diào)用它們。
如果bean實(shí)現(xiàn)IntializingBean了,調(diào)用它的afterPropertySet方法,如果bean聲明了初始化方法,調(diào)用此初始化方法。
如果有BeanPostProcessors 和bean 關(guān)聯(lián),這些bean的postProcessAfterInitialization() 方法將被調(diào)用。
如果bean實(shí)現(xiàn)了 DisposableBean,它將調(diào)用destroy()方法。
8. 哪些是重要的bean生命周期方法? 你能重載它們嗎?
有兩個(gè)重要的bean 生命周期方法,第一個(gè)是setup , 它是在容器加載bean的時(shí)候被調(diào)用。第二個(gè)方法是 teardown 它是在容器卸載類的時(shí)候被調(diào)用。
The bean 標(biāo)簽有兩個(gè)重要的屬性(init-method和destroy-method)。用它們你可以自己定制初始化和注銷方法。它們也有相應(yīng)的注解(@PostConstruct和@PreDestroy)。
9. 什么是Spring的內(nèi)部bean?
當(dāng)一個(gè)bean僅被用作另一個(gè)bean的屬性時(shí),它能被聲明為一個(gè)內(nèi)部bean,為了定義inner bean,在Spring 的 基于XML的 配置元數(shù)據(jù)中,可以在 或 元素內(nèi)使用 元素,內(nèi)部bean通常是匿名的,它們的Scope一般是prototype。
10. 在 Spring中如何注入一個(gè)java集合?
Spring提供以下幾種集合的配置元素:
類型用于注入一列值,允許有相同的值。
類型用于注入一組值,不允許有相同的值。
類型用于注入一組鍵值對,鍵和值都可以為任意類型。
類型用于注入一組鍵值對,鍵和值都只能為String類型。
11. 什么是bean裝配?
裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關(guān)系,如何通過依賴注入來把它們裝配到一起。
12. 什么是bean的自動裝配?
Spring 容器能夠自動裝配相互合作的bean,這意味著容器不需要和配置,能通過Bean工廠自動處理bean之間的協(xié)作。
13. 解釋不同方式的自動裝配
有五種自動裝配的方式,可以用來指導(dǎo)Spring容器用自動裝配方式來進(jìn)行依賴注入
no:默認(rèn)的方式是不進(jìn)行自動裝配,通過顯式設(shè)置ref 屬性來進(jìn)行裝配。
byName:通過參數(shù)名 自動裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byname,之后容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。
byType:通過參數(shù)類型自動裝配,Spring容器在配置文件中發(fā)現(xiàn)bean的autowire屬性被設(shè)置成byType,之后容器試圖匹配、裝配和該bean的屬性具有相同類型的bean。如果有多個(gè)bean符合條件,則拋出錯(cuò)誤。
constructor:這個(gè)方式類似于byType, 但是要提供給構(gòu)造器參數(shù),如果沒有確定的帶參數(shù)的構(gòu)造器參數(shù)類型,將會拋出異常。
autodetect:首先嘗試使用constructor來自動裝配,如果無法工作,則使用byType方式。
14.自動裝配有哪些局限性?
自動裝配的局限性是:
重寫:你仍需用 和 配置來定義依賴,意味著總要重寫自動裝配。
基本數(shù)據(jù)類型:你不能自動裝配簡單的屬性,如基本數(shù)據(jù)類型,String字符串,和類。
模糊特性:自動裝配不如顯式裝配精確,如果有可能,建議使用顯式裝配。
15. 你可以在Spring中注入一個(gè)null 和一個(gè)空字符串嗎?
可以。
想要成為一個(gè)優(yōu)秀的程序員的伙伴們來說,想要成為一個(gè)優(yōu)秀的、有能力程序員的話,其實(shí)作為一個(gè)開發(fā)者或者編程學(xué)習(xí)者,有一個(gè)學(xué)習(xí)的氛圍跟交流圈子特別重要!這里我推薦一個(gè)Java交流Q-群,708-701-457,不管你是大牛還是小白,大家都一起成長進(jìn)步。
群內(nèi)還有免費(fèi)的學(xué)習(xí)、面試資料提供
image
總結(jié)
以上是生活随笔為你收集整理的Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中报错convension_La
- 下一篇: php 判断两个数组差集,php arr