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