應用場景面試題集(各知識點不同使用場景選型)
1. Spring 配置 Bean 實體化有哪些方式?
- 使用類構造器實體化(默認無引數)
<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean> - 使用靜態工廠方法實體化(簡單工廠模式)
//下面這段配置的含義:呼叫 Bean2Factory 的 getBean2 方法得到 bean2
<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory"
factorymethod="getBean2"></bean> - 使用實體工廠方法實體化(工廠方法模式)
//先創建工廠實體 bean3Facory,再通過工廠實體創建目標 bean 實體
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"/><bean
id="bean3" factorybean="bean3Factory" factorymethod="getBean3"></bean>
2. Bean 注入屬性有哪幾種方式
- 屬性注入方式,通過 setXXX() 方法注入 Bean 的屬性值或者依賴物件
- 建構式注入方式,使用的前提:Bean 必須提供帶參的建構式
- 工廠方法注入方式
3. 在 Spring 中如何實作時間處理?
在 applicationContext.xml 中配置事件源、監聽器,先得到事件源,呼叫事件 源的方法,通知監聽器,
4. Spring 中如何更高效的使用 JDBC ?
傳統的 JDBC 實作有兩個不足之處:
- 連接需要自己管理操
- JDBC 操作代碼封裝與撰寫重復實作
Spring 實作了 JdbcTemplate,在 JDBC API 的基礎做了科學的封裝,
JdbcTemplate 的優點有:
- 配置基于模板化處理
- JdbcTemplate 是執行緒安全類
- 實體化操作比較簡單,僅需要傳遞 DataSource
- 自動完成資源的創建和釋放作業
- 對 JDBC 的核心流程進行了封裝,簡化了對 JDBC 的操作
- 創建一次 JdbcTemplate,到處可用,避免重復開發
5. 請介紹一下設計模式在 Spring 框架中的使用?
- 工廠模式:BeanFactory 就是簡單工廠模式的體現,用來創建物件的實 例,
- 單例模式:Bean 默認為單例模式,
- 代理模式:Spring 的 AOP 功能用到了 JDK 的動態代理和 CGLIB 字 節碼生成技術,
- 模板方法:用來解決代碼重復的問題,比如:RestTemplate, JmsTemplate, JpaTemplate,
- 觀察者模式:定義物件鍵一種一對多的依賴關系,當一個物件的狀態發生
改變時,所有依賴于它的物件都會得到通知被制動更新,如 Spring 中
listener 的實作:ApplicationListener,
6. 講講 Spring 框架的優點有哪些?
- 非侵入式設計:代碼與框架的依賴性比較低,
- 代碼解耦:提供控制反轉能力,物件的創建和依賴關系的維護作業都交給
Spring 容器的管理,大大的降低了物件之間的耦合性, - 可復用性提高:支 AOP ,允許將一些通用能力(列印日志、事務處理、 安全操作等)
進行集中式處理, - MVC 框架:Spring 的 Web 框架是個精心設計的框架,是 Web 框架 的一個很好的替代品,
- 事務支持方便:Spring 提供一個持續的事務管理介面,配置化完成對事 物的管理,減少手動編程,
- 例外處理:Spring 提供方便的 API 把具體技術相關的例外(比如由 JDBC、Hibernate or JDO 拋出的)轉化為一致的 unchecked 例外,
- 方便程式測驗:提供了對 Junit4 的支持,可以通過注解方便的測驗 Spring 程式,
7. 哪種依賴注入方式你建議使用,構造器注入,還是 Setter 方法注 入?
你兩種依賴方式都可以使用,構造器注入和 setter 方法注入,最好的解決方案 是用構造器引數實作強制依賴,setter 方法實作可選依賴,
8. 你怎樣定義類的作用域?
當定義一個 在 Spring 里,我們還能給這個 Bean 宣告一個作用域,
它可以通過 Bean 定義中的 scope 屬性來定義,如,當 Spring 要在需要的
時候每次生產一個新的Bean實體 , Bean的scope屬性被指定為prototype,
另一方面,一個 Bean 每次使用的時候必須回傳同一個實體,這
個 Bean 的 scope 屬性必須設為 singleton,
9. 解釋 Spring 支持的幾種 Bean 的作用域
Spring 框架支持以下五種 Bean 的作用域:
- singleton:Bean 在每個 Spring IoC 容器中只有一個實體,
- prototype:一個 Bean 的定義可以有多個實體,
- request:每次 http 請求都會創建一個 Bean,該作用域僅在基于 Web 的 Spring ApplicationContext
情形下有效, - session:在一個 HTTP Session 中,一個 Bean 定義對應一個實體, 該作用域僅在基于 Web 的 Spring ApplicationContext 情形下有效,
- global-session:在一個全域的 HTTP Session 中,一個 Bean 定義對 應一個實體,該作用域僅在基于 Web 的 Spring ApplicationContext 情形下有效,
預設的 Spring Bean 的作用域是 Singleton,
10. 在 Spring 中如何注入一個 Java 集合?
Spring 提供以下幾種集合的配置元素:
- 型別用于注入一列值,允許有相同的值,
- 型別用于注入一組值,不允許有相同的值,
- 型別用于注入一組鍵值對,鍵和值都只能為 String 型別,
11. 你可以在 Spring 中注入一個 null 和一個空字串嗎?
可以
12. 什么是基于 Java 的 Spring 注解配置?
給一些注解的例子 基于 Java 的配置,允許你在少量的 Java 注解的幫助下,進行你的大部分 Spring 配置而非通過 XML 檔案,
以 @Configuration 注解為例,它用來標記類可以當做一個 Bean 的定義,被
Spring IOC 容器使用,另一個例子是 @Bean 注解,它表示此方法將要回傳一
個物件,作為一個 Bean 注冊進 Spring 應用背景關系,
13. 你更傾向用那種事務管理型別?
宣告式事務管理,因為它對應用代碼侵入性很少,更符合一個無侵入的輕量級容 器的思想,
宣告式事務管理要優于編程式事務管理,雖然比編程式事務管理(這種方式允許
你通過代碼控制事務)少了一點靈活性,
14. Bean 的呼叫方式有哪些?
有三種方式可以得到 Bean 并進行呼叫,
- 使用 BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(”msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(”msg”)); - 使用 BeanFactory
InputStream is=new FileInputStream(”config.xml”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
system.out.println(hw.getMsg()); - 使用 ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);
HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
System.out.println(hw.getMsg());
使用 @ResponseBody 注解,
15. Spring MVC 里面攔截器是怎么寫的
有兩種寫法,一種是實作介面,另外一種是繼承配接器類,然后在 Spring MVC
的組態檔中配置攔截器即可:
<!-- 配置 SpringMvc 的攔截器 --> <mvc:interceptors>
<!-- 配置一個攔截器的 Bean 就可以了 默認是對所有請求都攔截 -->
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"/>
<!-- 只針對部分請求攔截 -->
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" />
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor> </mvc:interceptors>
16. 當一個方法向 AJAX 回傳特殊物件,譬如 Object、List 等,需要 做什么處理?
要加上 @ResponseBody 注解,
17. 如何使用 Spring MVC 完成 JSON 操作
- 配置 MappingJacksonHttpMessageConverter
- 使用 @RequestBody 注解或 ResponseEntity 作為回傳值
18. Spring 如何整合 Hibernate
整合 Hibernate,即由 IoC 容器生成 SessionFactory 物件, 并使用 Spring
的宣告式事務,
- 利用 LocalSessionFactoryBean 工廠 Bean,宣告一個使用 XML 映射
檔案的 SessionFactory 實體 - 利用 HibernateTransactionManager 配置 Hibernate 的事務管理器
19. Spring 如何整合 Struts2 ?
整合 Struts2,即由 IoC 容器管理 Struts2 的 Action:
- 安裝 Spring 插件:把 struts2-spring-plugin-2.2.1.jar 復制到當前
Web 應用的 WEB-INF/lib 目錄下 - 在 Spring 的組態檔中配置 Struts2 的 Action 實體
- 在 Struts 組態檔中配置 action,但其 class 屬性不再指向該 Action
的實作類,而是指向 Spring 容器中 Action 實體的 ID
20. 開發中主要使用 Spring 的什么技術 ?
- IoC 容器管理各層的組件
- 使用 AOP 配置宣告式事務
- 整合其他框架
21. 介紹一下 Spring MVC 常用的一些注解
- @RequestMapping:處理請求地址映射的注解,可用于類或方法上,
- @PathVariable:系結 URI 模板變數值是用來獲得請求 url 中的動態參
數 - @RequestParam:用于將指定的請求引數賦值給方法中的形參
- @RequestBody:讀取 Request 請求的 body 部分資料
- @ResponseBody:用于將 Controller 的方法回傳的物件,通過適當的 HttpMessageConverter
轉換為指定格式后,寫入到 Response 物件 的 body 資料區
22. Spring 框架的事務管理有哪些優點
- 為不同的事務 API( JDBC、Hibernate、JPA )提供統一的編程模型
- 封裝了簡單統一的 API 對事物進行管理操作
- 同時支持宣告式事物和編程時事物兩種方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/248635.html
標籤:其他
上一篇:nginx的介紹與安裝使用
