這里是由多位互聯網大廠架構師面試整理的出現頻率最高的spring相關面試題,并為大家整理了完整的答案,趕緊收藏起來吧!
100道spring高頻面試題
- Spring概覽
- 1、Spring是什么?
- 2、Spring框架的好處?
- 3、Spring有哪些模塊?
- 4、解釋Core Container(Application context)模塊
- 5、BeanFactory實作實體
- 6、XMLBeanFactory
- 7、解釋AOP模塊
- 8、解釋JDBC抽象和DAO模塊
- 9、解釋物件/關系映射集成模塊
- 10、解釋Spring web模塊
- 11、解釋Spring MVC模塊
- 12、Spring組態檔
- 13、如何才能有多個Spring組態檔?
- 14、ApplicationContext有哪些常見實作?
- 15、Bean Factory和ApplicationContext有什么區別?
- 16、Spring框架的一些最佳實踐是什么?
- 17、使用Spring框架的方式有哪些?
- 18、我們如何使用Spring創建restful web服務來回傳JSON回應結果?
- 19、Spring vs Spring MVC vs Spring Boot?
- 20、一個Spring大概是什么樣子?
- 依賴注入
- 21、Spring的IOC容器是什么?
- 22、IOC的好處有哪些?
- 23、Spirng中有多少種IOC容器?
- 24、BeanFactory和ApplicationContext比較
- 25、什么是Spring中的依賴注入?
- 26、緊耦合和松耦合有什么區別?
- 27、IOC(依賴注入)有哪些不同型別?
- 28、你建議使用構造方法注入還是Setter注入?
- Spring Beans
- 29、Spring beans是什么?
- 30、Spring bean定義包含什么?
- 31、如何向Spring容器提供配置元資料?
- 32、怎么定義bean的作用域?
- 33、說明Sprig支持的bean作用域
- 34、單例作用域是執行緒安全的嗎?
- 35、解釋Spring Bean的宣告周期
- 36、有哪些重要的bean生命周期方法?你能重寫它們嗎?
- 37、Spring的內部bean是什么?
- 38、如何在Spring中注入Java集合?
- 39、什么是Spring Bean裝配?
- 40、什么是Bean自動裝配?
- 41、解釋不同型別的自動裝配
- 42、自動注入有限制嗎?
- 43、你能在Spring中注入null和空字串嗎?
- Spring注解
- 44、有哪些重要的Spring注解?
- 45、@RequestParam注解的作用是什么?
- 46、注解@Primary的重要性
- 47、XML配置和注解之間有什么區別?
- 48、@SpringBootApplication的作用是什么?
- 49、解釋@InitBinder?
- 50、定義@ControllerAdvice
- 51、我們可以將一個個物件作為控制器處理程式方法的回應嗎?
- 52、解釋@ModelAttribute?
- 53、@RequestMapping注解
- 54、什么是spring中基于java的配置?給出一注解示例
- 55、什么是基于注解的容器配置?
- 56、如何打開注解裝配?
- Spring 資料訪問
- 57、Spring JDBC API中有哪些類?
- 58、如何在Spring框架中更高效地使用JDBC?
- 59、JdbcTemplate
- 60、如何通過spring JdbcTemplate獲取資料?
- 61、NamedParameterJdbcTemplate的優點是什么?
- 62、什么是SpringJDBCTemplate類以及如何使用它?
- 63、 JDBC和Spring JDBC有什么區別?
- 64、Spring DAO支持
- 65、使用Spring訪問Hibernate有哪些方式?
- 66、Spring支持的ORM
- 67、如何使用HibernateDaoSupport集成Spring和Hibernate?
- 68、Spring支持的事務管理型別?
- 69、Spring框架的事務管理有哪些優點?
- 70、哪種事務管理型別更可取?
- Spring AOP
- 71、解釋AOP
- 72、AOP有哪些優點?
- 73、AOP有哪些實作?
- 74、AOP術語有哪些?
- 75、切面
- 76、連接點
- 77、通知
- 78、切點
- 79、什么是引入?
- 80、什么是目標物件?
- 81、什么是代理?
- 82、有哪些不同型別的代理?
- 83、什么是織入,什么是織入應用的不同點?
- 84、Spring AOP中關注點和橫切關注點有什么區別?
- 85、解釋基于XML Schema方式的切面實作
- 86、解釋基于注解的切面實作
- 87、什么是Spring MVC框架?
- 88、創建spring mvc應用程式所需的最少配置是什么?
- 89、說出Spring MVC請求處理的主要流程?
- 90、DispatcherServlet
- 91、WebApplicationContext
- 92、 Spring MVC中的控制器是什么?
- 93、你如何將spring mvc框架與MVC架構聯系起來?
- 94、Spring MVC中的ViewResolver是什么?
- 95、MultipartResolver是什么?怎么使用?
- 96、如何在spring mvc應用程式中上傳檔案?
- 97、Spring Web MVC怎么校驗資料?
- 98、什么是springmvc攔截器以及如何使用它?
- 擴展
- 99、Spring Security是什么?
- 100、為什么要用SpringBoot?
Spring概覽
1、Spring是什么?
Spring是一個企業級Java開發框架,Spring框架的核心特性可用于開發任何Java應用程式,但也有一些擴展用于在Java EE平臺上構建web應用程式,Spring框架的目標是通過基于POJO的模型,使Java EE開發更加簡單,
2、Spring框架的好處?
輕量級:Spring框架是輕量級的,最基礎的版本大約只有2MB,
控制反轉(IOC):通過控制反轉技術,實作了解耦合,物件給出它們的依賴,而不是創建或查找依賴的物件,
面向切面(AOP):Spring支持面向切面的編程,并將應用程式業務邏輯與系統服務分離,
MVC框架:Spring的WEB框架是一個設計良好的web MVC框架,它為web框架提供了一個很棒的替代方案,
容器:Spring包含并管理物件的生命周期和配置,
事務管理:Spring提供了一個一致性的事務管理介面,可以收縮到本地事務,也可以擴展到全域事務(JTA),
例外處理:Spring提供了方便的API來將具體技術的例外(由JDBC、Hibernate或JDO拋出)轉換為一致的unchecked 例外,
3、Spring有哪些模塊?
Spring大約有20個模塊,包括核心容器、Data Access/Integration、Web, AOP , Instrumentation 和Test,
??Spring框架最核心的是Spring Core Container它包含以下模塊:
Core
Bean
Context
Expression Language
??Data Access/Integration,提供與資料庫互動的支持,它包含以下模塊:
JDBC
Object-Relational Mapping (ORM)
Java Messaging Service (JMS)
Object XML Mappers (OXM)
Transaction Management
??Web,提供創建web應用程式的支持,它包含以下模塊:
Web
Web-MVC
Web-Socket
Web-Portlet
??Test,支持使用JUnit和TestNG進行測驗,
??Messaging,提供對STOMP的支持,它還支持用于路由和處理來自WebSocket客戶端的STOMP訊息的注釋編程模型,
??Aspects,提供與AspectJ集成的支持,
4、解釋Core Container(Application context)模塊
這是最基本的Spring模塊,它提供Spring框架的基本功能,BeanFactory是任何基于spring的應用程式的核心,Spring框架是基于這個模塊的,它構建了Spring容器,
5、BeanFactory實作實體
BeanFactory是工廠模式的實作,它使用控制反轉來將程式的配置和依賴項與實際的業務代碼分開,
6、XMLBeanFactory
最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根據XML檔案的定義加載對應的bean,這個容器從XML檔案中讀取配置元資料,并使用它創建完全配置化的應用程式,
7、解釋AOP模塊
AOP模塊用于為支持Spring應用程式面向切面的開發,AOP聯盟提供了很多支持,這樣就確保了Spring和其他AOP框架的共通性,本模塊還將元資料編程引入Spring,
8、解釋JDBC抽象和DAO模塊
使用JDBC抽象和DAO模塊,我們可以確保保持資料庫代碼的整潔和簡單,并避免資料庫資源關閉而導致的問題,它在多個資料庫服務器給出的例外之上提供了一層統一的例外,它還利用Spring的AOP模塊為Spring應用程式中的物件提供事務管理服務,
9、解釋物件/關系映射集成模塊
Spring還通過提供ORM模塊,支持直接在JDBC上使用物件/關系映射(ORM)工具,Spring支持集成幾個流行的ORM框架中,包括Hibernate、JDO和iBATIS SQL Maps,Spring的事務管理同樣支持這些ORM框架和JDBC,
10、解釋Spring web模塊
Spring web模塊基于applicationcontext模塊,提供了一個適合基于web的應用程式的背景關系,此模塊還支持多種面向web的任務,例如隱式地處理檔案上傳請求,以及將請求引數編程系結到業務物件,還包含與Jakarta Struts的集成,
11、解釋Spring MVC模塊
Spring提供了MVC框架,用于構建web應用程式,Spring可以很簡單與其他MVC框架集成,但是Spring的MVC框架是一個更好的選擇,因為它使用IOC將控制層邏輯與業務物件完全分離,使用Spring MVC,你可以宣告性地將請求引數系結到業務物件,
12、Spring組態檔
Spring組態檔是一個XML檔案,這個檔案包含類資訊,并說明這些類是如何配置和相互呼叫的,
13、如何才能有多個Spring組態檔?
web.xml contextConfigLocation:你可以通過ContextConfigLocation元素將多個組態檔全部加載到Web應用程式背景關系中,假設你正在撰寫一個web應用程式,已經有了主應用程式背景關系,你只需在下一個背景關系的宣告之間留出一些空白,
applicationContext.xml匯入resource:你可以添加你的主applicationContext.xml至web.xml檔案,然后在主背景關系中使用import陳述句,
14、ApplicationContext有哪些常見實作?
FileSystemXmlApplicationContext容器從XML檔案加載bean的定義,XML bean組態檔的完整路徑必須提供給建構式,
ClassPathXmlApplicationContext容器也從XML檔案加載bean的定義,這里,你需要正確設定classpath因為這個容器將在classpath里找bean配置,
WebXmlApplicationContext容器從web應用程式中加載包含所有bean定義的XML檔案,
15、Bean Factory和ApplicationContext有什么區別?
Application contexts提供一種方法處理文本訊息,一個通常的做法是加載檔案資源(比如鏡像),它們可以向注冊為監聽器的bean發布事件,另外,在容器或容器內的物件上執行的那些不得不由bean工廠以程式化方式處理的操作,可以在Application contexts中以宣告的方式處理,Application contexts實作了MessageSource介面,該介面的實作以可插拔的方式提供獲取本地化訊息的方法,
16、Spring框架的一些最佳實踐是什么?
可見 20 個Spring框架實踐 ,
17、使用Spring框架的方式有哪些?
可以這樣使用Spring框架:
用于撰寫web應用程式
提供Restful服務
保護你的web應用程式
聯通資料庫
處理長時間運行的作業
處理你必須要用的外部資源和系統
用于測驗
用于獨立的java專案
將應用程式轉換為可執行檔案
將社交媒體集成到應用程式中
18、我們如何使用Spring創建restful web服務來回傳JSON回應結果?
只要Jackson2在classpath中,SpringBoor程式中的任何Spring @RestController修飾的控制器默認都回傳json格式結果,
19、Spring vs Spring MVC vs Spring Boot?
Spring:Spring最重要的特性是依賴注入或控制反轉,
Spring MVC :是一個完全面向HTTP的MVC框架,由Spring框架管理并基于servlet,
SpringBoot:是一個用于快速配置的應用框架,它提供現成的配置,以便構建Spring應用,
20、一個Spring大概是什么樣子?
介面:定義了一些方法的介面,
Bean類:它包含屬性、setter和getter方法、其它方法等等,
Spring AOP:提供關注橫切面的功能,
XML組態檔:包含類的資訊以及如何配置它們,
客戶程式:呼叫方法,
依賴注入
21、Spring的IOC容器是什么?
Spring IOC負責創建物件,使用依賴注入(dependency injection,DI)管理它們,將物件集中起來,配置物件,管理物件的整個生命周期,
22、IOC的好處有哪些?
IOC或依賴注入最小化應用程式代碼量,
它使測驗應用程式變得容易,因為單元測驗中不需要單例或JNDI查找機制,
以最小的代價和最少的干擾來促進松耦合,
IOC容器支持快速實體化和懶加載,
23、Spirng中有多少種IOC容器?
BeanFactory:BeanFactory本質上只不過是高層級的工廠介面,它能夠維護不同bean及其依賴項的注冊表,BeanFactory使你能夠讀取bean定義并使用bean工廠呼叫它們,
ApplicationContext:ApplicationContext是Spring應用程式中的核心介面,用于向應用程式提供配置資訊,它在運行時是只讀的,但如果需要并且應用支持的話,可以重新加載,許多類實作了ApplicationContext介面,允許多種配置項和應用型別,
24、BeanFactory和ApplicationContext比較
Application Context:
Bean實體化/裝配
BeanPostProcessor自動注冊
BeanFactoryPostProcessor自動注冊
方便的訊息源訪問(針對i18n)
ApplicationEvent發布
BeanFactory:
Bean實體化/裝配
25、什么是Spring中的依賴注入?
依賴注入是控制反轉(IOC)的一個方面,是一個通用的概念,它有很多種表達的方式,這個概念意思你不創建你的物件,但描述他們應該如何創建,你不會在代碼中直接將組件和服務耦合在一起,而是描述組態檔中的哪些組件需要哪些服務,然后由一個容器(IOC容器)負責將它們關聯起來,
26、緊耦合和松耦合有什么區別?
緊耦合:
緊密耦合是指類之間高度依賴,
松耦合:
松耦合是通過促進單一職責和關注點分離的設計來實作的,
27、IOC(依賴注入)有哪些不同型別?
構造方法注入:基于構造方法的依賴注入是在容器呼叫一個帶有多個引數的類構造方法時完成的,每個引數都表示對其他類的依賴,
Setter注入:Setter注入是由容器在呼叫無引數構造方法或無引數靜態工廠方法實體化Bean后呼叫Bean的Setter方法來實作的,
28、你建議使用構造方法注入還是Setter注入?
可以同時使用構造方法注入和Setter注入,最好的解決方案是對強制依賴項使用構造方法注入,對可選依賴項使用setter方法注入,
Spring Beans
29、Spring beans是什么?
Spring bean是構成Spring應用程式主干的Java物件,它們由springioc容器實體化、組裝和管理,這些bean是使用提供給容器的配置元資料創建的,例如,XML中形式定義,
spring框架中定義的bean是單例bean,bean標記中有一個名為“singleton”的屬性,如果指定為true,則bean為單例;如果設定為false,則bean將成為prototype bean,默認設定為true,所以,spring框架中的所有bean默認都是單例bean,
30、Spring bean定義包含什么?
Spring bean的定義包含容器如何創建Bean、其生命周期及其依賴關系所需的所有配置元資料,
31、如何向Spring容器提供配置元資料?
向Spring容器提供配置元資料有三種重要方法:
基于XML的組態檔
基于注解的配置
基于Java的配置
32、怎么定義bean的作用域?
在Spring中定義時,我們還可以為bean宣告一個作用域,它可以通過bean定義中的scope屬性來定義,例如,當Spring每次需要生成一個新的bean實體時,這個bean的scope屬性就是prototype,另一方面,當Spring每次需要時都必須回傳同一個bean實體時,bean scope屬性必須設定為singleton,
33、說明Sprig支持的bean作用域
singleton:Spring將bean定義的范圍限定為每個Spring IOC容器只有一個單實體,
prototype:單個bean定義有任意數量的物件實體,
request:作用域為一次http請求,該作用域僅在基于web的Spring ApplicationContext情形下有效,
session:作用域為HTTP Session,該作用域僅在基于web的Spring ApplicationContext情形下有效,
global-session:作用域為全域的HTTP session,該作用域也是僅在基于web的Spring ApplicationContext情形下有效,
默認的作用域是singleton,
34、單例作用域是執行緒安全的嗎?
不,單例bean在Spring框架中不是執行緒安全的,
35、解釋Spring Bean的宣告周期
Spring容器 從XML 檔案中讀取bean的定義,并實體化bean,
Spring填充bean定義(DI)中指定的所有屬性,
如果bean實作了BeanNameAware介面,spring會將bean的id傳遞給setBeanName()方法,
如果有任何BeanBeanPostProcessor與該bean關聯,Spring將呼叫postProcesserBeforeInitialization()方法,
如果bean實作了IntializingBean,則呼叫其afterPropertySet()方法,如果bean宣告了init方法,則呼叫指定的init方法,
如果有任何與bean關聯的beanPostProcessor,則將呼叫它們的postProcessAfterInitialization()方法,
如果bean實作l了DisposableBean,它將呼叫destroy()方法,
36、有哪些重要的bean生命周期方法?你能重寫它們嗎?
有兩個重要的生命周期方法,
第一個是setup,當bean加載到容器中時呼叫它,第二個方法是teardown方法,當bean從容器中卸載時呼叫該方法,
bean標簽有兩個重要的屬性(init-method和destroy-method),可以用它們定義自己的自定義初始化和銷毀方法,還有相應的注解(@PostConstruct和@PreDestroy),
37、Spring的內部bean是什么?
當一個bean僅被用作另一個bean的屬性時,它能被宣告為一個內部bean,為了定義內部bean,在Spring 的 基于XML的 配置元資料中,可以在 < property/ >或 < constructor-arg/ > 元素內使用< bean/ > 元素,內部bean通常是匿名的,它們的作用域一般是prototype,
38、如何在Spring中注入Java集合?
Spring提供以下幾種集合的配置元素:
型別用于注入一列值,允許有相同的值,
型別用于注入一組值,不允許有相同的值,
型別用于注入一組鍵值對,鍵和值都只能為String型別,
39、什么是Spring Bean裝配?
裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關系,如何通過依賴注入來把它們裝配到一起,
40、什么是Bean自動裝配?
Spring 容器能夠自動裝配 自動關聯 的bean,這意味著,通過檢查BeanFactory的內容,而不使用
41、解釋不同型別的自動裝配
自動裝配有五種模式,可用于指示Spring容器使用autowiring進行依賴注入:
no:默認的方式是不進行自動裝配,通過顯式設定ref 屬性來進行裝配,
byName:通過引數名 自動裝配,Spring容器在組態檔中發現bean的autowire屬性被設定成byname,之后容器試圖匹配、裝配和該bean的屬性具有相同名字的bean,
byType:過引數型別自動裝配,Spring容器在組態檔中發現bean的autowire屬性被設定成byType,之后容器試圖匹配、裝配和該bean的屬性具有相同型別的bean,如果有多個bean符合條件,則拋出例外,
constructor:這個方式類似于byType, 但是要提供構造器引數,如果沒有確定的帶引數的構造器引數型別,將會拋出例外,
autodetect:首先嘗試使用constructor來自動裝配,如果不行,則使用byType方式,
42、自動注入有限制嗎?
自動注入的限制:
重寫: 你仍可以用 < constructor-arg >和 < property > 配置來定義依賴,這些配置將始終覆寫自動注入,
基本資料型別:不能自動裝配簡單的屬性,如基本資料型別、字串和類,
模糊特性:自動裝配不如顯式裝配精確,如果有可能盡量使用顯示裝配,
43、你能在Spring中注入null和空字串嗎?
是的,可以,
Spring注解
44、有哪些重要的Spring注解?
我在專案中使用的一些Spring注解:
@Component:用于指示類是組件,這些類用于自動注入,并在使用基于注解的配置時配置為bean,
@Controller:是一種特定型別的組件,用于MVC應用程式,主要與@RequestMapping注解一起使用,
@Repository:用于表示組件用作存盤庫和存盤/檢索/搜索資料的操作,我們可以將此注解應用于DAO實作類,
@Service:用于指示類是服務層,
@Required:此注解簡單地說明作用的bean屬性必須在配置時通過bean定義中的顯式屬性值或通過自動注入填充,如果作用的bean屬性未填充,容器將拋出BeanInitializationException,
@ResponseBody:用于將物件作為response,通常用于將XML或JSON資料作為response發送,
@PathVariable:用于將動態值從URI映射到處理方法引數,
@Autowired:對自動注入的位置和方式提供了更細粒度的控制,它可以用于在setter方法上自動注入bean,就像@Required 注解一樣,修飾setter方法、構造器、屬性或者具有任意名稱和/或多個引數的PN方法,
@Qualifier:當有多個相同型別的bean并且只需要將一個bean自動注入時,@Qualifier注解與@Autowired注釋一起使用,通過指定將連接哪個bean來消除歧義,
@Scope:配置Spring bean的作用域,
@Configuration:表示Spring IOC容器可以將該類用作bean定義的源,
@ComponentScan:應用此注解時,將掃描包下的所有可用類,
@Bean:對于基于java的配置,用@Bean注解修飾的方法將回傳一個在Spring應用程式背景關系中注冊為Bean的物件,
用于配置切面和通知、@Aspect、@Before、@After、@Around、@Pointcut等的AspectJ注解,
45、@RequestParam注解的作用是什么?
spring中的@RequestParam注解將查詢字串的引數值系結到控制器的方法引數,
46、注解@Primary的重要性
當有多個相同資料型別的bean時,開發人員Spring的@Primary注解,它會自動為特定bean提供更高的優先級,這個注解可以用在任何直接或間接用@Component注解修飾的類上,也可以用在用@Bean注解修飾的方法上,
47、XML配置和注解之間有什么區別?
注解的優點:
所有資訊都在一個檔案中
當類更改了,不用修改xml組態檔
xml配置的優點:
POJO及其行為之間更清晰地分離
當你不知道哪個POJO負責該行為時,更容易找到該POJO
48、@SpringBootApplication的作用是什么?
@SpringBootApplication 注解是在springboot1.2.0中引入的,它支持自動配置特性,
此批注封裝了三種不同注解的作用:
@Configuration:允許開發人員顯式地注冊bean
@ComponentScan:啟用組件掃描,這樣控制器類和其他組件將被自動發現并注冊為Spring應用程式背景關系中的bean
@EnableAutoConfiguration:啟動SpringBoot的自動配置特性
此注解可以使用以下可選引數:
exclude:從自動配置中排除的類串列
excludeNames:從自動配置中排除完全限定類名的串列
scanBasePackage:其中提供了掃描程式包的串列
scanBasePackageClasses:提供必須應用于掃描的其他包中的類的串列
49、解釋@InitBinder?
此注解修飾在宣告日期格式的方法上,并且在整個類中,使用定義的日期格式,每當系結作用在日期欄位@InitBinder注解中時,說明使用CustomDateEditor,而CustomDateEditor則使用@InitBinder中宣告的日期格式,
50、定義@ControllerAdvice
有@ControllerAdvice注解的類可以顯式宣告為Spring bean,或者通過類路徑掃描自動注入,所有這樣的bean都是通過AnnotationAwareOrderComparator排序的,即基于@Order和Ordered,并在運行時按該順序呼叫,對于處理例外,將使用匹配的例外處理程式方法在第一個通知上選擇一個@ExceptionHandler,對于模型屬性和InitBinder初始化,@ModelAttribute和@InitBinder方法也將遵循@ControllerAdvice順序,
51、我們可以將一個個物件作為控制器處理程式方法的回應嗎?
是的,我們可以使用@ResponseBody注解在restful web服務中發送基于JSON或XML的回應,
52、解釋@ModelAttribute?
@ModelAttribute注解參考模型物件的屬性,用于準備模型資料,此注解將方法變數或模型物件系結到命名的模型屬性,此注解接受一個可選值,該值表示模型屬性的名稱,@ModelAttribute注解可以在引數級別或方法級別使用,在引數級別使用此注解是為了接受請求表單值,而在方法級別則是將默認值分配給模型,
53、@RequestMapping注解
@RequestMapping注解用于將web請求映射到處理程式類(即控制器)或處理程式方法上,它可以在方法級或類級使用,如果開發人員在類級別使用@RequestMapping注釋,它將作為方法級路徑的相對路徑,
54、什么是spring中基于java的配置?給出一注解示例
基于Java的配置選項使你能夠在不使用XML的情況下撰寫大多數Spring配置,但是需要一些基于Java的注釋的幫助,
一個例子是@Configuration注釋,它表示spring IOC容器可以將該類用作bean定義的源,另一個例子是@Bean注解的方法,該方法將回傳一個物件,該物件應在Spring應用程式背景關系中注冊為bean,
55、什么是基于注解的容器配置?
XML配置之外的另一種選擇是基于注解的配置,它依賴位元組碼元資料來裝配組件,而不是尖括號宣告,開發人員不使用XML來描述bean裝配,而是通過在相關的類、方法或欄位宣告上使用注解將配置移動到組件類中,
56、如何打開注解裝配?
默認情況下,Spring容器中的注解裝配不會打開,為了使用基于注解的裝配,我們必須在Spring組態檔中配置context:annotation-config/ 元素,
Spring 資料訪問
57、Spring JDBC API中有哪些類?
JdbcTemplate
SimpleJdbcTemplate
NamedParameterJdbcTemplate
SimpleJdbcInsert
SimpleJdbcCall
58、如何在Spring框架中更高效地使用JDBC?
使用SpringJDBC 框架,資源管理和錯誤處理的代價都會被減輕,所以開發者只需寫statements 和 queries從資料存取資料,JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個模板叫JdbcTemplate ,
59、JdbcTemplate
JdbcTemplate 類提供了很多便利的方法解決諸如把資料庫資料轉變成基本資料型別或物件,執行寫好的或可呼叫的資料庫操作陳述句,提供自定義的資料錯誤處理,
60、如何通過spring JdbcTemplate獲取資料?
有兩個介面可用于從資料庫中獲取資料:
ResultSetExtractor
RowMapper
61、NamedParameterJdbcTemplate的優點是什么?
NamedParameterJdbcTemplate是基于spring提供的JDBCTemplate構建的,用于與資料庫的底層互動,它可以將SQL查詢引數作為鍵值對傳遞,因此,與索引或“?”相比,程式代碼的可讀性要高得多,因此可以作為更好的標識“?“”占位符方法,特別是在引數數目龐大的情況下,后者更難跟蹤,
62、什么是SpringJDBCTemplate類以及如何使用它?
JdbcTemplate類執行SQL查詢、update陳述句和存盤程序呼叫,對結果集執行迭代,并提取回傳的引數值,它隱式處理資源的創建和釋放,從而避免諸如忘記關閉連接之類的錯誤,它還捕獲JDBC例外并進行包裝,
63、 JDBC和Spring JDBC有什么區別?
Spring JDBC在JDBC的頂層提供資料操作:
1、定義連接引數
2、打開連接
3、指定陳述句
4、準備并執行陳述句
5、設定回圈以迭代結果(如果有)
6、操作每個迭代
7、處理任何例外
8、處理事務
9、關閉連接
64、Spring DAO支持
Spring中對資料訪問物件(DAO)的支持目的使人們更容易以一致的方式使用JDBC、Hibernate或JDO等資料訪問技術,這使我們可以相當容易地在持久性技術之間切換,也可以不必擔心捕捉每種技術特有的例外,
65、使用Spring訪問Hibernate有哪些方式?
有兩種方式使用Spirng訪問Hibernate,
使用Hibernate模板和回呼進行控制反轉,
擴展HibernateDAOSupport并應用AOP攔截器節點,
66、Spring支持的ORM
Spring支持下面的ORM:
Hibernate
iBatis
JPA(Java持久化API)
TopLink
JDO (Java Data Objects)
OJB
67、如何使用HibernateDaoSupport集成Spring和Hibernate?
用Spring的 SessionFactory 呼叫 LocalSessionFactory,集成程序分三步:
配置the Hibernate SessionFactory
繼承HibernateDaoSupport實作一個DAO
在AOP支持的事務中裝配
68、Spring支持的事務管理型別?
編程式事務管理:?這意味你通過編程的方式管理事務,給你很大的靈活性,但是難維護,
宣告式事務管理:?這意味著你可以將業務代碼和事務管理分離,你只需用注解和XML配置來管理事務,
69、Spring框架的事務管理有哪些優點?
它提供了跨不同事務api(如JTA、JDBC、Hibernate、JPA和JDO)的一致編程模型,
它為編程事務管理提供了比JTA等許多復雜事務API更簡單的API,
它支持宣告式事務管理,
它很好地集成了Spring的各種資料訪問抽象,
70、哪種事務管理型別更可取?
大多數Spring框架的用戶選擇宣告式事務管理,因為它對應用代碼的影響最小,因此更符合一個無侵入的輕量級容器的思想,宣告式事務管理要優于編程式事務管理,雖然比編程式事務管理(這種方式允許你通過代碼控制事務)少了一點靈活性,
Spring AOP
71、解釋AOP
面向切面編程,或AOP, 是一種編程技術,允許程式模塊化橫向切割關注點,或橫切典型的責任劃分,如日志和事務管理,
72、AOP有哪些優點?
a.它是非侵入性的
你的service/domain類被切面通知,而無需在service/domain類中添加任何與spring aop相關的類或介面,
允許開發人員專注于業務代碼,而不是切點,
b.它是用純Java實作的
不需要特殊的編譯單元或特殊的類加載器
c.它使用Spring的IOC進行依賴注入
切面可以配置為普通的spring bean,
d.與任何其他AOP框架一樣,它將橫切關注點編織到類中,而不從這些類中呼叫橫切關注點,
e.集中或模塊化橫切關注點
易于維護和更改切面
改變需要在一處進行,
在你不希望有的類中有日志記錄,可以通過修改相應切面(日志切面)中的切入點來輕松實作,所以你只需要在一個地方做出改變,
f.用于使用基于模式(XML配置)或@AspectJ基于注解的方式創建切面,
g.易于配置
73、AOP有哪些實作?
AOP實作:
Spring AOP:
通過動態代理實作
它只支持方法級切入點
它是基于DTD的
Apache AspectJ:
通過aspectj java工具實作編譯時編織,是通過靜態代理實作的
它支持欄位級切入點
它是基于模式和注解配置的
74、AOP術語有哪些?
切面
通知
切點
連接點
引入
目標物件
AOP代理
織入
75、切面
AOP的核心結構是切面,它將影響多個類的行為封裝到可重用的模塊中,提供了一組跨領域需求的ia模塊,例如,一個日志模塊將被稱為AOP切面進行日志記錄,根據需求,應用程式可以有任意數量的切面,在spring aop中,切面是使用帶有@Aspect注釋(@AspectJ樣式)注解的常規類來實作的,
76、連接點
連接點代表一個應用程式的某個位置,在這個位置我們可以插入一個AOP切面,它實際上是個應用程式執行Spring AOP的位置,
77、通知
通知是個在方法執行前或執行后要做的動作,實際上是程式執行時要通過SpringAOP框架觸發的代碼段,
Spring切面可以應用五種型別的通知:
before: 前置通知,在一個方法執行前被呼叫
after: 在方法執行之后呼叫的通知,無論方法執行是否成功
after-returning: 僅當方法成功完成后執行的通知
after-throwing: 在方法拋出例外退出時執行的通知
around: 在方法執行之前和之后呼叫的通知
78、切點
切入點是一個或一組連接點,通知將在這些位置執行,可以通過運算式或匹配的方式指明切入點,
79、什么是引入?
引入允許我們在已存在的類中增加新的方法和屬性,
80、什么是目標物件?
目標物件是由一個或多個切面通知的物件,它將始終是一個代理物件,它也被稱為通知(advised)物件,
81、什么是代理?
代理是通知目標物件后創建的物件,從客戶端的角度看,代理物件和目標物件是一樣的,
82、有哪些不同型別的代理?
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
83、什么是織入,什么是織入應用的不同點?
織入是將切面和到其他應用型別或物件連接或創建一個被通知物件的程序,
織入可以在編譯時,加載時,或運行時完成,
84、Spring AOP中關注點和橫切關注點有什么區別?
關注點是我們希望在應用程式的模塊中擁有的行為,關注點可以定義為我們想要實作的功能,
橫切關注點是一個在整個應用程式中都適用的關注點,它會影響整個應用程式,例如,日志記錄、安全性和資料傳輸是應用程式中幾乎每個模塊都需要的關注點,因此它們是橫切關注點,
85、解釋基于XML Schema方式的切面實作
在這種情況下,切面由常規類以及基于XML的配置實作,
86、解釋基于注解的切面實作
在這種情況下(基于@AspectJ的實作),涉及到的切面宣告的風格與帶有java5標注的普通java類一致,
G.Spring Model View Controller (MVC)
87、什么是Spring MVC框架?
Spring 配備構建Web 應用的全功能MVC框架,Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務物件和控制邏輯清晰地隔離,它也允許以宣告的方式把請求引數和業務物件系結,
88、創建spring mvc應用程式所需的最少配置是什么?
為了創建一個簡單的Spring MVC應用程式,我們需要做以下作業:
在專案中添加spring背景關系和spring-webmvc依賴,在web.xml中配置DispatcherServlet來通過spring容器處理請求,
定義bean的spring bean組態檔,如果使用注解,那么必須在這里配置它,我們還需要為視圖頁面配置視圖決議器,
定義用于處理客戶端請求的請求映射的控制器類,
89、說出Spring MVC請求處理的主要流程?
瀏覽器向DispatcherServlet發送請求
DispatcherServlet獲取HanderMapping并找到適當的控制器
控制器執行請求并將資料放入模型中,并將視圖名稱回傳給DispatcherServlet,
DispatcherServlet通過視圖名稱和ViewResolver映射到對應的視圖,
90、DispatcherServlet
Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理所有的HTTP請求和回應,
91、WebApplicationContext
WebApplicationContext 繼承了ApplicationContext 并增加了一些WEB應用必備的特有功能,它不同于一般的ApplicationContext ,因為它能處理主題,并找到被關聯的servlet,
92、 Spring MVC中的控制器是什么?
控制器提供一個訪問應用程式的行為,此行為通常通過服務介面實作,控制器決議用戶輸入并將其轉換為一個由視圖呈現給用戶的模型,Spring用一個非常抽象的方式實作了一個控制層,允許用戶創建多種用途的控制器,
93、你如何將spring mvc框架與MVC架構聯系起來?
SpringMVC框架:
Spring框架是一個開源的web應用程式框架和Java平臺的控制反轉容器,
MVC架構:
MVC(Model-View-Controller,簡稱MVC)是一種用于開發web應用程式的軟體設計模式.
94、Spring MVC中的ViewResolver是什么?
Spring提供了ViewResolver,它使你能夠在瀏覽器中渲染模型,而無需將系結到特定的視圖技術,例如,Spring允許您使用jsp、Velocity模板和XSLT視圖,對Spring處理視圖的方式很重要的兩個介面是ViewResolver和View,ViewResolver提供視圖名稱和實際視圖之間的映射,View介面處理請求的準備作業,并將請求移交給某一個視圖技術,
95、MultipartResolver是什么?怎么使用?
spring mvc通過MultipartResolver提供多請求支持,MultipartResolver決議入站多請求,你可以通過在DispatcherServlet應用程式背景關系中注冊MultipartResolver bean來啟用多請求支持,
96、如何在spring mvc應用程式中上傳檔案?
Spring為通過MultipartResolver介面為上傳檔案提供了內置支持,該欄位還有一個驗證器,用于檢查上載的檔案的大小是否大于零,最后只需要一個簡單的視圖,其中包含一個帶有上載檔案選項的表單,
97、Spring Web MVC怎么校驗資料?
這里有三種方式去 提供校驗 :使用注解、手動校驗、或者兩者混合,
98、什么是springmvc攔截器以及如何使用它?
Spring的處理程式映射機制包括處理程式攔截器,當你希望將特定功能應用于某些請求時,例如,檢查用戶主題時,這些攔截器非常有用,攔截器必須實作org.springframework.web.servlet包的HandlerInterceptor,此介面定義了三種方法:
preHandle:在執行實際處理程式之前呼叫,
postHandle:在執行完實際程式之后呼叫,
afterCompletion:在完成請求后呼叫,
擴展
99、Spring Security是什么?
Spring security 是Spring框架中最重要的模塊之一,它使開發人員能夠以一種可管理的方式輕松地集成安全特性,在下面的示例中,我們將展示如何在springmvc應用程式中實作Spring安全性,
100、為什么要用SpringBoot?
以下是使用SpringBoot的一些好處:
自動配置,使用基于類路徑和應用程式背景關系的智能默認值,當然也可以根據需要重寫它們以滿足開發人員的需求,
創建Spring Boot Starter 專案時,可以選擇選擇需要的功能,Spring Boot將為你管理依賴關系,
SpringBoot專案可以打包成jar檔案,可以使用Java-jar命令從命令列將應用程式作為獨立的Java應用程式運行,
在開發web應用程式時,springboot會配置一個嵌入式Tomcat服務器,以便它可以作為獨立的應用程式運行,(Tomcat是默認的,當然你也可以配置Jetty或Undertow)
SpringBoot包括許多有用的非功能特性(例如安全和健康檢查),

以上就是從各個大廠整理的最新Spring面試題了,如果對您有幫助記得點贊+收藏哦,感謝您的支持!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/60563.html
標籤:其他
上一篇:解釋結構模型ISM如何用matlab完整實作 代碼是啥啊
下一篇:AttributeError: 'NoneType' object has no attribute 'startswith'
