javascript
这些Spring面试题,你都会了吗?
轉(zhuǎn)載自? ?這些Spring面試題,你都會(huì)了嗎?
問題一:
什么是Spring?
Spring是Enterprise Java的開源開發(fā)框架。Spring Framework的核心功能可用于開發(fā)任何Java應(yīng)用程序,但有一些擴(kuò)展用于在Java EE平臺(tái)之上構(gòu)建Web應(yīng)用程序。Spring框架的目標(biāo)是通過啟用基于POJO的編程模型,使Java EE開發(fā)更易于使用并促進(jìn)良好的編程實(shí)踐。
問題二:
Spring Framework有哪些優(yōu)點(diǎn)?
輕巧:Spring在尺寸和透明度方面都很輕巧。spring框架的基本版本大約為2MB。
?控制反轉(zhuǎn)(IOC): 使用反轉(zhuǎn)控制技術(shù)在Spring中實(shí)現(xiàn)松耦合。對(duì)象提供依賴關(guān)系,而不是創(chuàng)建或查找依賴對(duì)象。?
面向方面(AOP): Spring支持面向方面的編程,并將應(yīng)用程序業(yè)務(wù)邏輯與系統(tǒng)服務(wù)分開。?
容器: Spring包含并管理應(yīng)用程序?qū)ο蟮纳芷诤团渲谩?MVC框架: Spring的Web框架是一個(gè)設(shè)計(jì)良好的Web MVC框架,它為Web框架提供了一個(gè)很好的替代方案。?
事務(wù)管理: Spring提供了一致的事務(wù)管理界面,可以縮小到本地事務(wù)并擴(kuò)展到全局事務(wù)(JTA)。?
異常處理: Spring提供了一個(gè)方便的API,用于將特定于技術(shù)的異常(由JDBC,Hibernate或JDO拋出)轉(zhuǎn)換為一致的,未經(jīng)檢查的異常。
問題三:
核心容器(應(yīng)用程序上下文)模塊是什么?
這是基本的Spring模塊,它提供了Spring框架的基本功能。BeanFactory是任何基于spring的應(yīng)用程序的核心。Spring框架是在這個(gè)模塊的頂部構(gòu)建的,它構(gòu)成了Spring容器。
問題四:
AOP模塊是什么?
AOP模塊用于為我們的Spring應(yīng)用程序開發(fā)方面。AOP聯(lián)盟提供了大部分支持,以確保Spring與其他AOP框架之間的互操作性。該模塊還向Spring引入了元數(shù)據(jù)編程。
問題五:
解釋一下JDBC抽象和DAO模塊
使用JDBC抽象和DAO模塊,我們可以確保我們使數(shù)據(jù)庫代碼保持干凈和簡(jiǎn)單,并防止因無法關(guān)閉數(shù)據(jù)庫資源而導(dǎo)致的問題。它在幾個(gè)數(shù)據(jù)庫服務(wù)器給出的錯(cuò)誤消息之上提供了一層有意義的異常。它還利用Spring的AOP模塊為Spring應(yīng)用程序中的對(duì)象提供事務(wù)管理服務(wù)。
問題六:
解釋一下對(duì)象/關(guān)系映射集成模塊
通過提供ORM模塊,Spring還支持在直接JDBC上使用對(duì)象/關(guān)系映射(ORM)工具。Spring支持綁定到幾個(gè)流行的ORM框架,包括Hibernate,JDO和iBATIS SQL Maps。Spring的事務(wù)管理支持每個(gè)ORM框架以及JDBC。
問題七:
web模塊的作用是什么?
Spring Web模塊構(gòu)建在應(yīng)用程序上下文模塊上,提供適用于基于Web的應(yīng)用程序的上下文。此模塊還包含對(duì)幾個(gè)面向Web的任務(wù)的支持,例如透明地處理文件上載的多部分請(qǐng)求以及將請(qǐng)求參數(shù)編程綁定到業(yè)務(wù)對(duì)象。它還包含與Jakarta Struts的集成支持。
問題八:
Spring MVC模塊的作用是什么?
Spring提供了MVC框架來構(gòu)建Web應(yīng)用程序。Spring可以很容易地與其他MVC框架集成,但是Spring的MVC框架是更好的選擇,因?yàn)樗褂肐oC來提供控制器邏輯與業(yè)務(wù)對(duì)象的清晰分離。使用Spring MVC,您可以聲明性地將請(qǐng)求參數(shù)綁定到業(yè)務(wù)對(duì)象。
問題九:
什么是Spring配置文件?
Spring配置文件是一個(gè)XML文件。此文件包含類信息,并描述了這些類是如何配置和相互引入的。
問題十:
什么是Spring IoC容器?
Spring IoC負(fù)責(zé)創(chuàng)建對(duì)象,管理它們(使用依賴注入(DI)),將它們連接在一起,配置它們,以及管理它們的整個(gè)生命周期。
問題十一:
IOC有什么好處?
IOC或依賴注入最小化應(yīng)用程序中的代碼量。它使測(cè)試應(yīng)用程序變得容易,因?yàn)樵趩卧獪y(cè)試中不需要單例或JNDI查找機(jī)制。以最小的努力和最少的侵入機(jī)制促進(jìn)松散耦合。IOC容器支持急切的實(shí)例化和延遲加載服務(wù)。
問題十二:
ApplicationContext的常見實(shí)現(xiàn)是什么?
該FileSystemXmlApplicationContext來容器從XML文件加載bean的定義。必須將XML bean配置文件的完整路徑提供給構(gòu)造函數(shù)。
該ClassPathXmlApplicationContext的容器還加載從XML文件java bean的定義。在這里,您需要正確設(shè)置CLASSPATH,因?yàn)榇巳萜鲗⒃贑LASSPATH中查找bean配置XML文件。
該WebXmlApplicationContext:容器從Web應(yīng)用程序中加載的所有bean類定義的XML文件。
問題十三:
Bean Factory和ApplicationContext有什么區(qū)別?
ApplicationContex提供了一種解析文本消息的方法,一種加載文件資源(如圖像)的通用方法,它們可以將事件發(fā)布到注冊(cè)為偵聽器的bean。此外,可以在應(yīng)用程序上下文中以聲明方式處理容器中的容器或容器上的操作,這些操作必須以編程方式與Bean Factory一起處理。ApplicationContex實(shí)現(xiàn)MessageSource,一個(gè)用于獲取本地化消息的接口,實(shí)際的實(shí)現(xiàn)是可插入的。
問題十四:
什么是Spring中的依賴注入?
依賴注入是控制反轉(zhuǎn)(IoC)的一個(gè)方面,它是一個(gè)通用概念,它可以用許多不同的方式表達(dá)。這個(gè)概念說你不創(chuàng)建你的對(duì)象,而是描述它們應(yīng)該如何創(chuàng)建。您不能在代碼中直接連接組件和服務(wù),而是描述配置文件中哪些組件需要哪些服務(wù)。然后,一個(gè)容器(IOC容器)負(fù)責(zé)將其全部掛起。
問題十五:
有哪些不同類型的IoC(依賴注入)?
基于構(gòu)造函數(shù)的依賴注入:當(dāng)容器調(diào)用具有許多參數(shù)的類構(gòu)造函數(shù)時(shí),完成基于構(gòu)造函數(shù)的DI,每個(gè)參數(shù)表示對(duì)其他類的依賴。 基于Setter的依賴注入:基于Setter的DI是在調(diào)用無參數(shù)構(gòu)造函數(shù)或無參數(shù)靜態(tài)工廠方法來實(shí)例化bean之后,通過容器調(diào)用bean上的setter方法來完成的。
問題十六:
Spring bean是什么?
Spring Beans是構(gòu)成Spring應(yīng)用程序主干的Java對(duì)象。它們由Spring IoC容器實(shí)例化,組裝和管理。這些bean是使用提供給容器的配置元數(shù)據(jù)創(chuàng)建的,例如,以XML定義的形式。
在spring框架中定義的bean是singleton bean。如果指定為true,則bean標(biāo)記中有一個(gè)名為“singleton”的屬性,然后bean變?yōu)閟ingleton,如果設(shè)置為false,則bean將成為原型bean。默認(rèn)情況下,它設(shè)置為true。因此,spring框架中的所有bean都是默認(rèn)的單例bean。
問題十七:
如何為Spring容器提供配置元數(shù)據(jù)?
為Spring容器提供配置元數(shù)據(jù)有三種重要方法:
-
基于XML的配置文件。?
-
基于注釋的配置。
-
基于Java的配置。
問題十八:
如何定義bean的范圍?
在Spring中定義一個(gè)時(shí),我們也可以為bean聲明一個(gè)范圍。它可以通過bean定義中的scope屬性定義。例如,當(dāng)Spring每次需要生成一個(gè)新的bean實(shí)例時(shí),bean'sscope屬性就是原型。另一方面,當(dāng)每次需要Spring都必須返回相同的bean實(shí)例時(shí),bean scope屬性必須設(shè)置為singleton。
問題十九:
Spring支持的bean范圍有哪些?
Spring Framework支持以下五個(gè)范圍提供了五個(gè)范圍:
在作用域的單重態(tài)中,Spring將bean定義范圍限定為每個(gè)Spring IoC容器的單個(gè)實(shí)例。?
在原型范圍中,單個(gè)bean定義具有任意數(shù)量的對(duì)象實(shí)例。?
在請(qǐng)求范圍中,bean被定義為HTTP請(qǐng)求。此范圍僅在Web感知的Spring ApplicationContext中有效。?
在會(huì)話范圍中,bean定義的范圍限定為HTTP會(huì)話。此范圍僅在Web感知的Spring ApplicationContext中有效。?
在全局會(huì)話范圍中,bean定義的范圍限定為全局HTTP會(huì)話。這也是Web感知Spring ApplicationContext中使用的一種情況。 Spring Bean的默認(rèn)范圍是Singleton。
問題二十:
Spring Framework中的Singleton bean線程安全嗎?
不,單例bean在Spring框架中不是線程安全的。
問題二十一:
解釋Spring框架中的Bean生命周期
spring容器從XML文件中查找bean的定義并實(shí)例化bean。?
Spring填充bean定義(DI)中指定的所有屬性。?
如果bean實(shí)現(xiàn)了StringNameAware接口,則spring將bean的id傳遞給setBeanName()?
如果Bean implementsBeanFactoryAware接口,spring將beanfactory傳遞給setBeanFactory()?
如果有任何與bean關(guān)聯(lián)的beanBeanPostProcessors,則Spring調(diào)用postProcesserBeforeInitialization()?
如果bean implementsIntializingBean,則調(diào)用其afterPropertySet()方法。
如果bean具有init方法聲明,則調(diào)用指定的初始化方法。?
如果有任何與Bean關(guān)聯(lián)的BeanPostProcessors,則將調(diào)用它們的postProcessAfterInitialization()方法。?
如果bean實(shí)現(xiàn)了DisposableBean,它將調(diào)用destroy()
問題二十二:
哪些是重要的bean生命周期方法?可以覆蓋它們嗎?
有兩個(gè)重要的bean生命周期方法。第一個(gè)是setup,當(dāng)bean加載到容器中時(shí)調(diào)用。第二種方法是拆卸方法,當(dāng)從容器中卸載bean時(shí)調(diào)用該方法。
bean標(biāo)記有兩個(gè)重要的屬性(init-method和destroy-method),您可以使用它們定義自己的自定義初始化和銷毀方法。還有相應(yīng)的注釋(@PostConstruct和@PreDestroy)。
問題二十三:
Spring的內(nèi)部beans是什么?
當(dāng)bean僅用作另一個(gè)bean的屬性時(shí),可以將其聲明為內(nèi)部bean。Spring的基于XML的配置元數(shù)據(jù)提供了bean定義中元素的使用,以便定義所謂的內(nèi)部bean。內(nèi)部bean總是匿名的,它們總是作為原型。
問題二十四:
如何在Spring中注入Java Collection?
Spring提供以下類型的集合配置元素:
在允許重復(fù)的情況下,該類型用于注入值列表。 該類型用于連接一組值,但沒有任何重復(fù)。 該類型用于注入名稱 - 值對(duì)的集合,其中name和value可以是任何類型。 該類型可用于注入名稱 - 值對(duì)的集合,其中名稱和值都是字符串。
問題二十五:
什么是Bean wiring?
當(dāng)bean在Spring容器中組合在一起時(shí),接線或者bean接線就是這種情況。布線bean時(shí),Spring容器需要知道需要什么bean以及容器應(yīng)該如何使用依賴注入將它們綁定在一起。
問題二十六:
什么是bean auto wiring?
Spring容器能夠自動(dòng)連接協(xié)作bean之間的關(guān)系。這意味著可以通過檢查BeanFactory的內(nèi)容而不使用和元素來自動(dòng)讓Spring解析bean的協(xié)作者(其他bean)。
問題二十七:
解釋不同的自動(dòng)接線方式?
自動(dòng)裝配功能有五種模式,可用于指示Spring容器使用自動(dòng)裝配進(jìn)行依賴注入:
no: 這是默認(rèn)設(shè)置。應(yīng)使用顯式bean引用進(jìn)行布線。?
byName: 當(dāng)自動(dòng)裝配byName時(shí),Spring容器會(huì)查看在XML配置文件中autowireattribute設(shè)置為byName的bean的屬性。然后,它嘗試匹配并將其屬性與配置文件中由相同名稱定義的bean相連。?
byType: 當(dāng)按數(shù)據(jù)類型進(jìn)行自動(dòng)裝配時(shí),Spring容器會(huì)在XML配置文件中查看autowireattribute設(shè)置為byType的bean的屬性。然后,如果屬性的類型與配置文件中的一個(gè)bean名稱匹配,則會(huì)嘗試匹配并連接屬性。如果存在多個(gè)這樣的bean,則拋出致命異常。?
構(gòu)造函數(shù):此模式類似于byType,但type適用于構(gòu)造函數(shù)參數(shù)。如果容器中沒有構(gòu)造函數(shù)參數(shù)類型的一個(gè)bean,則會(huì)引發(fā)致命錯(cuò)誤。?
autodetect: Spring首先嘗試通過構(gòu)造函數(shù)使用autowire連接,如果它不起作用,Spring會(huì)嘗試通過byType來自動(dòng)裝配。
問題二十八:
autowiring有限制嗎?
autowiring的局限性是:
覆蓋:您仍然可以使用和設(shè)置指定依賴項(xiàng),這將始終覆蓋自動(dòng)裝配。?
基元數(shù)據(jù)類型: 您不能自動(dòng)裝配簡(jiǎn)單屬性,例如基元,字符串和類。?
令人困惑的性質(zhì):自動(dòng)裝配不如顯式布線精確,因此如果可能,請(qǐng)使用明確的布線。
問題二十九:
什么是基于Spring Java的配置?給出一些注釋示例。
基于Java的配置選項(xiàng)使您可以在沒有XML的情況下編寫大部分Spring配置,但可以使用少量基于Java的注釋。
一個(gè)示例是@Configuration注釋,它指示Spring IoC容器可以將該類用作bean定義的源。另一個(gè)例子是@ Bean注釋方法,它將返回一個(gè)應(yīng)該在Spring應(yīng)用程序上下文中注冊(cè)為bean的對(duì)象。
問題三十:
什么是基于注釋的容器配置?
基于注釋的配置提供了XML設(shè)置的替代方案,該配置依賴于字節(jié)碼元數(shù)據(jù)來連接組件而不是角括號(hào)聲明。開發(fā)人員不是使用XML來描述bean連接,而是通過在相關(guān)的類,方法或字段聲明上使用注釋將配置移動(dòng)到組件類本身。
問題三十一:
如何打開注釋線?
默認(rèn)情況下,Spring容器中未打開注釋接線。為了使用基于注釋的布線,我們必須通過配置元素在Spring配置文件中啟用它。
問題三十二:
如何在Spring框架中更有效地使用JDBC?
使用Spring JDBC框架時(shí),減少了資源管理和錯(cuò)誤處理的負(fù)擔(dān)。因此,開發(fā)人員只需編寫語句和查詢即可將數(shù)據(jù)傳入和傳出數(shù)據(jù)庫。借助Spring框架提供的模板類(JdbcTemplate),可以更有效地使用JDBC
問題三十三:
Spring DAO支持的作用是什么
Spring中的數(shù)據(jù)訪問對(duì)象(DAO)支持旨在使您能夠以一致的方式輕松使用JDBC,Hibernate或JDO等數(shù)據(jù)訪問技術(shù)。這使我們可以非常輕松地在持久性技術(shù)和代碼之間切換,而無需擔(dān)心捕獲特定于每種技術(shù)的異常。
問題三十四:
使用Spring訪問Hibernate有哪些方法?
使用Spring訪問Hibernate有兩種方法:
-
使用Hibernate模板和回調(diào)進(jìn)行控制反轉(zhuǎn)。
-
?ExtendingHibernateDAOSupport并應(yīng)用AOP攔截器節(jié)點(diǎn)。
問題三十五:
如何使用HibernateDaoSupport集成Spring和Hibernate?
使用名為L(zhǎng)ocalSessionFactory的Spring的SessionFactory。整合過程包括3個(gè)步驟:
-
配置Hibernate SessionFactory?
-
從HibernateDaoSupport擴(kuò)展DAO實(shí)現(xiàn)?
-
使用AOP連接事務(wù)支持
問題三十六:
事務(wù)管理類型的Spring支持有哪些?
Spring支持兩種類型的事務(wù)管理:
程序化事務(wù)管理: 這意味著您已經(jīng)在編程的幫助下管理了事務(wù)。這為您提供了極大的靈活性,但很難維護(hù)。?
聲明式事務(wù)管理: 這意味著您將事務(wù)管理與業(yè)務(wù)代碼分開。您只能使用注釋或基于XML的配置來管理事務(wù)。
問題三十七:
Spring Framework的事務(wù)管理有哪些好處?
它在不同的事務(wù)API(如JTA,JDBC,Hibernate,JPA和JDO)之間提供了一致的編程模型。 與許多復(fù)雜的事務(wù)API(如JTA)相比,它為程序化事務(wù)管理提供了更簡(jiǎn)單的API。 它支持聲明式事務(wù)管理。 它與Spring的各種數(shù)據(jù)訪問抽象集成得非常好。
問題三十八:
哪種交易管理類型更可取?
Spring Framework的大多數(shù)用戶選擇聲明式事務(wù)管理,因?yàn)樗菍?duì)應(yīng)用程序代碼影響最小的選項(xiàng),因此最符合非侵入式輕量級(jí)容器的理想。聲明式事務(wù)管理優(yōu)于程序化事務(wù)管理,但它不如程序化事務(wù)管理靈活,后者允許您通過代碼控制事務(wù)。
問題三十九:
什么是AOP?
面向方面的編程(AOP)是一種編程技術(shù),它允許程序員模塊化橫切關(guān)注點(diǎn)或行為,這些問題或行為跨越典型的責(zé)任分工,例如日志記錄和事務(wù)管理。
問題四十:
Spring AOP中的關(guān)注點(diǎn)和交叉關(guān)注點(diǎn)之間有什么區(qū)別?
關(guān)注點(diǎn)是我們希望在應(yīng)用程序模塊中擁有的行為。關(guān)注點(diǎn)可以定義為我們想要實(shí)現(xiàn)的功能。
跨領(lǐng)域的關(guān)注點(diǎn)是一個(gè)適用于整個(gè)應(yīng)用程序的問題,它會(huì)影響整個(gè)應(yīng)用程序。例如,日志記錄,安全性和數(shù)據(jù)傳輸是應(yīng)用程序幾乎每個(gè)模塊都需要的問題,因此它們是跨領(lǐng)域的問題。
總結(jié)
以上是生活随笔為你收集整理的这些Spring面试题,你都会了吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 70吋夏普大屏电视体验夏普液晶70寸电视
- 下一篇: 这些保护Spring Boot 应用的方