Java_框架面試題

Java_框架面試題html

歡迎來我Git上分享您的優秀建議前端

1.Spring框架分爲哪七大模塊,各模塊的主要功能做用是什麼?

七大模塊,以下: 1. Spring Core: Core封裝包是框架的最基礎部分,提供IOC和依賴注入特性。這裏的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程序性單例模式的須要,並真正地容許你從程序邏輯中分離出依賴關係和配置。java

  1. Spring Context: 構建於Core封裝包基礎上的 Context 封裝包,提供了一種框架式的對象訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並添加了對國際化(I18N)的支持(例如資源綁定),事件傳播,資源裝載的方式和Context的透明建立,好比說經過Servlet容器。nginx

  2. Spring DAO: DAO (Data Access Object)提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。 而且,JDBC封裝包還提供了一種比編程性更好的聲明性事務管理方法,不只僅是實現了特定接口,並且對全部的POJOs(plain old Java objects)都適用。git

  3. Spring ORM:ORM 封裝包提供了經常使用的「對象/關係」映射APIs的集成層。 其中包括 JPA 、 JDO 、 Hibernate 和 iBatis 。利用ORM封裝包,能夠混合使用全部Spring提供的特性進行「對象/關係」映射,如前邊提到的簡單聲明性事務管理。web

  4. Spring AOP: Spring的 AOP 封裝包提供了符合AOP Alliance規範的面向方面的編程實現,讓你能夠定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱代碼的功能耦合,清晰的被分離開。並且,利用source-level的元數據功能,還能夠將各類行爲信息合併到你的代碼中。面試

  5. Spring Web: Spring中的 Web 包提供了基礎的針對Web開發的集成特性,例如多方文件上傳,利用Servlet listeners進行IOC容器初始化和針對Web的ApplicationContext。當與WebWork或Struts一塊兒使用Spring時,這個包使Spring可與其餘框架結合。spring

  6. Spring Web MVC: Spring中的MVC封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架並非僅僅提供一種傳統的實現,它提供了一種清晰的分離模型,在領域模型代碼和Web Form之間。而且,還能夠藉助Spring框架的其餘特性。數據庫

2.Spring框架中的三大核心思想是什麼

DI(依賴注入),IOC(控制反轉),AOP(面向切面編程)編程

3.IOC的概念以及在Spring容器中如何進行IOC的操做。

IOC:Inversion of Control,控制反轉模式(也稱做依賴性介入)的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。

在Java開發中,IOC意味着將你設計好的類交給系統去控制,而不是在你的類內部控制,這稱爲控制反轉,就是被調用類的實例由原先的調用類控制建立、銷燬如今轉變成由Spring的容器管理。

4.DI的概念以及在Spring框架注入有幾種方式。使用構造注入對象,必需要注意什麼問題,當設值注入與構造注入同時存在時,執行的前後流程順序?

注入方式: 1. 接口注入 2. 屬性注入[屬性的SET/GET] 3. 構造注入[構造方法注入] 使用構造函數依賴注入時,Spring保證對象其所依賴的全部對象先實例化後,才實例化這個對象。 使用set方法依賴注入時,Spring首先實例化對象,而後才實例化全部依賴的對象。 * 當設值注入與構造注入同時存在時,先執行設置注入,在執行構造注入。

5.使用DI注入時,Property表明什麼意思,若是property引用的是其餘Bean的話,如何注入,若是引用是字符串的話,如何設置?

使用DI注入時,Property表明注入類的屬性,若是引用其餘的bean,則用ref屬性來代表被引用bean的名稱,若是是引用字符串的話,用value屬性。

如: \<property name=」userDao」 ref=」被引用bean的名稱」 /> \<property name=」username」 value = 」字符串」/>

6.在使用Spring的JDBCTemplate操做數據時,必需要往模板中注入哪些對象,同時模板要不要手動關閉數據庫鏈接

注入DataSource數據源對象,不須要手動關閉數據庫鏈接,JdbcTemplate會幫咱們關閉數據庫鏈接

7.AOP的概念以及使用AOP機制有什麼好處。Java編程中實現AOP有幾種方式?

  • AOP的概念是Aspected Oriented Programming 面向切面編程 >AOP將程序分解成各個切面或者說關注點。這使得能夠模塊化,至關橫向上分切了。它能夠解決OOP和過程化方法不可以很好解決的橫切(crosscut)問題,如:事務、安全、日誌等橫切關注。
  • 我的理解:若是說彙編語言是對計算機指令的抽象,面嚮對象語言是對程序要解決的問題的抽象,AOP則是對程序功能自己的抽象。

  • 實現AOP有幾種方式: >1. Spring 1.2版本中經過ProxyFactoryBean來實現aop,即經過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等 >2. Spring 2.0 AOP須要改的是FBI 這個類,並且它也不須要再實現某些接口 >3. 使用標註(@AspectJ)實現AOP

8.Spring框架中的事務處理有幾種。請分別闡述二者的區別

spring提供的事務管理能夠分爲兩類:編程式的和聲明式的。編程式的,比較靈活,可是代碼量大,存在重複的代碼比較多;聲明式的比編程式的更靈活.

9.Spring的聲明式事務能不能爲普通的類產生代理接口,能不能在代碼中使用Try/Catch能捕獲異常,若是不能夠,請說明緣由

不能。Spring的聲明式事務爲實現類產生代理。不能在代碼中使用Try/Catch,由於代碼中捕獲了異常,Spring容器捕獲不了異常。

10.SpringMVC的理解?SpringMVC的工做流程?

SpringMVC是基於過濾器對servlet進行了封裝的一個框架,咱們使用的時候就在web.xml中配置DispatcherServlet類;SpringMVC工做是主要是經過DispatcherServlet管理接受到的請求並進行處理。 * SpringMVC的工做流程描述:

  1. 第一步:用戶向服務器發送請求,請求被Spring前端控制Servelt DispatcherServlet捕獲;
  2. 第二步: DispatcherServlet對請求URL進行解析,獲得請求資源標識符(URL),而後根據該URL調用HandlerMapping得到該Handler配置的全部相關的對象(包括Handler對象以及Handler對象對應的攔截器),最後以HandlerExecutionChain對象的形式返回;
  3. 第三步: DispatcherServlet 根據得到的Handler,選擇一個合適的HandlerAdapter。(附註:若是成功得到HandlerAdapter後,此時將開始執行攔截器的preHandler(…)方法)
  4. 第四步:提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程當中,根據你的配置,Spring將幫你作一些額外的工做: >> 1. HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換爲指定的響應信息 >> 2. 數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等 >> 3. 數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期 >> 4. 數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中
  5. 第五步: Handler執行完成後,向DispatcherServlet 返回一個ModelAndView對象;
  6. 第六步:根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;
  7. 第七步:ViewResolver 結合Model和View,來渲染視圖
  8. 第八步:將渲染結果返回給客戶端。

11.Nginx怎麼實現負載均衡?

Nginx 是俄羅斯人編寫的十分輕量級的 是一個高性能的HTTP和反向代理服務器,同時也是一個 IMAP/POP3/SMTP 代理服務器. * Nginx實現負載均衡只須要在nginx文件中進行配置便可,配置以下: 1. 第一步:在http模塊中配置upstream 模塊:(舉例)

upstream www.myweb.com { server 127.0.0.1:9100 weight=1; server 127.0.0.1:9200 weight=1;} <br /> 其中weight=1表示權重,用於後端服務器性能不均的狀況,訪問比率約等於權重之比,權重越大訪問機會越多; upstream是配置nginx與後端服務器負載均衡很是重要的一個模塊,而且它還能對後端的服務器的健康狀態進行檢查,若後端服務器中的一臺發生故障,則前端的請求不會轉發到該故障的機器;

第二步:在server模塊裏添加:(舉例) location /myweb { proxy_pass http://www.myweb.com;} 其中 www.myweb.com 字符串要和 upstream 後面的字符串相等;

12.jsp靜態包含和動態包含的區別?

  • <%@ include file=」」 %>是指令元素,靜態包含。<jsp:include page=」」 />是行爲元素,動態包含。
  • 最終編譯成java文件的數目不一樣。 >1. 靜態包含在轉換成爲java文件的時候將包含文件的內容「複製」到主體文件,而後做爲一個總體編譯。生成一個以包含頁面命名的servlet和class文件。 >2. 動態包含是各個jsp文件分別轉換,分別編譯。最終編程成多個java文件。
  • 執行時間不一樣 > 靜態包含發生在:JSP生成class文件階段。 > 動態包含發生在:執行class文件階段。動態加入。
  • 靜態包含在兩個文件中不能有相同的變量,動態包含容許。
  • 不管是動態包含仍是靜態包含,其request對象都是相同的。也就是同一個request對象。

13.jsp有哪些內置對象?做用分別是什麼?

  • request
  • response
  • session
  • pageContext >>javax.servlet.jsp.PageContext 的實例,對象直譯時能夠稱做「頁面上下文」對象,表明的是當前頁面運行的一些屬性,經過此對象能夠拿到其餘8大對象,使用該對象能夠訪問頁面中的共享數據。經常使用的方法有getServletContextO和getServletConfigO等。
  • page >>對應this關鍵字,JSP網頁自己。page對象是當前頁面轉換後的Servlet類的實例。從轉換後的Servlet類的代碼中,能夠看到這種關係: <br/> Object page = this; <br/> 在JSP頁面中,不多使用page對象。
  • config >>javax.servlet. ServletConfig 的實例,該實例表明該JSP 的配置信息。經常使用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面一般無須配置,也就不存在配置信息。所以,該對象更多地在Servlet 中有效。
  • application >>服務器啓動後就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。可是與session不一樣的是,全部客戶的application對象都是同一個,即全部客戶共享這個內置的application對象。
  • exception >>該實例表明其餘頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可使用。經常使用的方法有getMessageO和printStackTraceO等。
  • out >>out對象是一個輸出流,用來向客戶端輸出數據。out對象用於各類數據的輸出。

其中,request、response、session、application、config這五個對象和Servlet的API是同樣的。

14.struts是什麼?

struts1是基於JSP和servlet的一個開源的Web應用框架,使用的是MVC的設計模式。struts2是基於webwork技術的框架,是sun和webwork公司聯手開發的一個功能很是齊全的框架,struts2和struts1沒有任何關係,是一個全新的框架

15.JSF是什麼?

JavaServer Face是基於組件的web開發框架,跟sturts差很少的框架

16.Tomcat 有哪幾種Connector 運行模式(優化)?

  • bio(blocking I/O):傳統的Java I/O操做,同步且阻塞IO。
  • nio(non-blocking I/O):JDK1.4開始支持,同步阻塞或同步非阻塞IO
  • apr(Apache Portable Runtime/Apache可移植運行庫):Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態連接庫來處理文件讀取或網絡傳輸操做,從而大大地 提升Tomcat對靜態文件的處理性能

17.Hibernate中SessionFactory是線程安全的嗎?Session是線程安全的嗎(兩個線程可以共享同一個Session嗎)?

SessionFactory對應Hibernate的一個數據存儲的概念,它是線程安全的,能夠被多個線程併發訪問。SessionFactory通常只會在啓動的時候構建。對於應用程序,最好將SessionFactory經過單例模式進行封裝以便於訪問。Session是一個輕量級非線程安全的對象(線程間不能共享session),它表示與數據庫進行交互的一個工做單元。Session是由SessionFactory建立的,在任務完成以後它會被關閉。Session是持久層服務對外提供的主要接口。Session會延遲獲取數據庫鏈接(也就是在須要的時候纔會獲取)。爲了不建立太多的session,可使用ThreadLocal將session和當前線程綁定在一塊兒,這樣可讓同一個線程得到的老是同一個session。Hibernate 3中SessionFactory的getCurrentSession()方法就能夠作到。

18.Hibernate中Session的load和get方法的區別是什麼?

  1. 若是沒有找到符合條件的記錄,get方法返回null,load方法拋出異常。
  2. get方法直接返回實體類對象,load方法返回實體類對象的代理。
  3. 在Hibernate 3以前,get方法只在一級緩存中進行數據查找,若是沒有找到對應的數據則越過二級緩存,直接發出SQL語句完成數據讀取;load方法則能夠從二級緩存中獲取數據;從Hibernate 3開始,get方法再也不是對二級緩存只寫不讀,它也是能夠訪問二級緩存的。

19.Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是作什麼的?有什麼區別?

  • Hibernate的對象有三種狀態:瞬時態(transient)、持久態(persistent)和遊離態(detached) > 1. 瞬時態的實例能夠經過調用save()、persist()或者saveOrUpdate()方法變成持久態 > 2. 遊離態的實例能夠經過調用 update()、saveOrUpdate()、lock()或者replicate()變成持久態。 > 3. save()和persist()將會引起SQL的INSERT語句,而update()或merge()會引起UPDATE語句。save()和update()的區別在於一個是將瞬時態對象變成持久態,一個是將遊離態對象變爲持久態。merge()方法能夠完成save()和update()方法的功能,它的意圖是將新的狀態合併到已有的持久化對象上或建立新的持久化對象。 > 4. persist()方法把一個瞬時態的實例持久化,可是並不保證標識符被馬上填入到持久化實例中,標識符的填入可能被推遲到flush的時間; persist()方法保證當它在一個事務外部被調用的時候並不觸發一個INSERT語句,當須要封裝一個長會話流程的時候,persist()方法是頗有必要的;save()方法它要返回標識符,因此它會當即執行INSERT語句,無論是在事務內部仍是外部。 > 5. 至於lock()方法和update()方法的區別,update()方法是把一個已經更改過的脫管狀態的對象變成持久狀態;lock()方法是把一個沒有更改過的脫管狀態的對象變成持久狀態。

20.鎖機制有什麼用?簡述Hibernate的悲觀鎖和樂觀鎖機制。

有些業務邏輯在執行過程當中要求對數據進行排他性的訪問,因而須要經過一些機制保證在此過程當中數據被鎖住不會被外界修改,這就是所謂的鎖機制。 1. 悲觀鎖,顧名思義悲觀的認爲在數據處理過程當中極有可能存在修改數據的併發事務(包括本系統的其餘事務或來自外部系統的事務),因而將處理的數據設置爲鎖定狀態。悲觀鎖必須依賴數據庫自己的鎖機制才能真正保證數據訪問的排他性 2. 樂觀鎖,顧名思義,對併發事務持樂觀態度(認爲對數據的併發操做不會常常性的發生),經過更加寬鬆的鎖機制來解決因爲悲觀鎖排他性的數據訪問對系統性能形成的嚴重影響。最多見的樂觀鎖是經過數據版本標識來實現的,讀取數據時得到數據的版本號,更新數據時將此版本號加1,而後和數據庫表對應記錄的當前版本號進行比較,若是提交的數據版本號大於數據庫中此記錄的當前版本號則更新數據,不然認爲是過時數據沒法更新。 * Hibernate中經過Session的get()和load()方法從數據庫中加載對象時能夠經過參數指定使用悲觀鎖;而樂觀鎖能夠經過給實體類加整型的版本字段再經過XML或@Version註解進行配置。

21.闡述Hibernate實體對象的三種狀態以及轉換關係。

  • 瞬時態:當new一個實體對象後,這個對象處於瞬時態,即這個對象只是一個保存臨時數據的內存區域,若是沒有變量引用這個對象,則會被JVM的垃圾回收機制回收。這個對象所保存的數據與數據庫沒有任何關係,除非經過Session的save()、saveOrUpdate()、persist()、merge()方法把瞬時態對象與數據庫關聯,並把數據插入或者更新到數據庫,這個對象才轉換爲持久態對象。
  • 持久態:持久態對象的實例在數據庫中有對應的記錄,並擁有一個持久化標識(ID)。對持久態對象進行delete操做後,數據庫中對應的記錄將被刪除,那麼持久態對象與數據庫記錄再也不存在對應關係,持久態對象變成移除態(能夠視爲瞬時態)。持久態對象被修改變動後,不會立刻同步到數據庫,直到數據庫事務提交。
  • 遊離態:當Session進行了close()、clear()、evict()或flush()後,實體對象從持久態變成遊離態,對象雖然擁有持久和與數據庫對應記錄一致的標識值,可是由於對象已經從會話中清除掉,對象不在持久化管理以內,因此處於遊離態(也叫脫管態)。遊離態的對象與臨時狀態對象是十分類似的,只是它還含有持久化標識。

22.使用Spring框架的好處是什麼?

  • 輕量:Spring 是輕量的,基本的版本大約2MB。
  • 控制反轉:Spring經過控制反轉實現了鬆散耦合,對象們給出它們的依賴,而不是建立或查找依賴的對象們。
  • 面向切面的編程(AOP):Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。
  • 容器:Spring 包含並管理應用中對象的生命週期和配置。
  • MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。
  • 事務管理:Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。
  • 異常處理:Spring 提供方便的API把具體技術相關的異常(好比由JDBC,Hibernate or JDO拋出的)轉化爲一致的unchecked 異常。

23.Spring的ApplicationContext一般的實現是什麼?

Application Context 是 spring 中較高級的容器。和 BeanFactory 相似,它能夠加載配置文件中定義的 bean,將全部的 bean 集中在一塊兒,當有請求的時候分配 bean。 另外,它增長了企業所須要的功能,好比,從屬性文件從解析文本信息和將事件傳遞給所指定的監聽器。這個容器在 org.springframework.context.ApplicationContext interface 接口中定義。

ApplicationContext 包含 BeanFactory 全部的功能,通常狀況下,相對於 BeanFactory,ApplicationContext 會被推薦使用。BeanFactory 仍然能夠在輕量級應用中使用,好比移動設備或者基於 applet 的應用程序。

  1. FileSystemXmlApplicationContext :此容器從一個XML文件中加載beans的定義,XML Bean 配置文件的全路徑名必須提供給它的構造函數。
  2. ClassPathXmlApplicationContext:此容器也從一個XML文件中加載beans的定義,這裏,你須要正確設置classpath由於這個容器將在classpath裏找bean配置。
  3. WebXmlApplicationContext:此容器加載一個XML文件,此文件定義了一個WEB應用的全部bean。

24.什麼是Spring beans?

Spring beans 是那些造成Spring應用的主幹的java對象。它們被Spring IOC容器初始化,裝配,和管理。這些beans經過容器中配置的元數據建立。好比,以XML文件中<bean/> 的形式定義。

Spring 框架定義的beans都是單件beans。在bean tag中有個屬性」singleton」,若是它被賦爲TRUE,bean 就是單件,不然就是一個 prototype bean。默認是TRUE,因此全部在Spring框架中的beans 缺省都是單件。

25.Spring的Bean工廠和Application contexts有什麼區別?

二者都是裝入bean定義信息,裝配bean,根據須要分發bean。可是ApplicationContext提供更多功能,它提供了bean工廠所沒有的解析信息文本工具,包括對國際化的支持,提供了載入文件資源的通用方法,如載入圖片,它能夠用註冊爲監聽器的bean發送事件。另一個很重要的區別是單例bean被載入的方式不同。bean工廠延遲載入全部的bean,直到getbean方法被調用,才被建立。而ApplicationContext會預裝入全部的單例bean,確保須要的時候單例bean都已經準備好了,這樣咱們的應用就不須要等待這些單例bean被建立。

26.如何給Spring 容器提供配置元數據?

這裏有三種重要的方法給Spring 容器提供配置元數據。 1. XML配置文件。 2. 基於註解的配置。 3. 基於java的配置。

27.解釋Spring支持的幾種bean的做用域。

當定義一個<bean> 在Spring裏,咱們還能給這個bean聲明一個做用域。它能夠經過bean 定義中的scope屬性來定義。如,當Spring要在須要的時候每次生產一個新的bean實例,bean的scope屬性被指定爲prototype。另外一方面,一個bean每次使用的時候必須返回同一個實例,這個bean的scope 屬性 必須設爲 singleton。 Spring框架支持如下五種bean的做用域: singleton : bean在每一個Spring ioc 容器中只有一個實例。缺省的Spring bean 的做用域是Singleton,且Spring框架中的單例bean不是線程安全的。 prototype:一個bean的定義能夠有多個實例。 request:每次http請求都會建立一個bean,該做用域僅在基於web的Spring ApplicationContext情形下有效。 session:在一個HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。 * global-session:在一個全局的HTTP Session中,一個bean定義對應一個實例。該做用域僅在基於web的Spring ApplicationContext情形下有效。

28.哪些是重要的bean生命週期方法? 你能重載它們嗎?

有兩個重要的bean 生命週期方法,第一個是setup , 它是在容器加載bean的時候被調用。第二個方法是 teardown 它是在容器卸載類的時候被調用。<br /> The bean 標籤有兩個重要的屬性(init-method和destroy-method)。用它們你能夠本身定製初始化和註銷方法。它們也有相應的註解(@PostConstruct和@PreDestroy)。

29.什麼是Spring的內部bean?

當一個bean僅被用做另外一個bean的屬性時,它能被聲明爲一個內部bean,爲了定義inner bean,在Spring 的 基於XML的 配置元數據中,能夠在 \<property/>或\<constructor-arg/> 元素內使用\<bean/> 元素,內部bean一般是匿名的,它們的Scope通常是prototype。

30. 在 Spring中如何注入一個java集合?

Spring提供如下幾種集合的配置元素: 1. \<list>類型用於注入一列值,容許有相同的值。 2. \<<set> 類型用於注入一組值,不容許有相同的值。 3. \<<map> 類型用於注入一組鍵值對,鍵和值均可覺得任意類型。 4. \<<props>類型用於注入一組鍵值對,鍵和值都只能爲String類型。

31.解釋不一樣方式的自動裝配 。

有五種自動裝配的方式,能夠用來指導Spring容器用自動裝配方式來進行依賴注入。 1. no:默認的方式是不進行自動裝配,經過顯式設置ref 屬性來進行裝配。 2. byName:經過參數名 自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byname,以後容器試圖匹配、裝配和該bean的屬性具備相同名字的bean。 3. byType::經過參數類型自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byType,以後容器試圖匹配、裝配和該bean的屬性具備相同類型的bean。若是有多個bean符合條件,則拋出錯誤。 4. constructor:這個方式相似於byType, 可是要提供給構造器參數,若是沒有肯定的帶參數的構造器參數類型,將會拋出異常。 5. autodetect:首先嚐試使用constructor來自動裝配,若是沒法工做,則使用byType方式。

32.自動裝配有哪些侷限性 ?

自動裝配的侷限性是: 1. 重寫: 你仍需用 <constructor-arg>和 <property> 配置來定義依賴,意味着總要重寫自動裝配。 2. 基本數據類型:你不能自動裝配簡單的屬性,如基本數據類型,String字符串,和類。 3. 模糊特性:自動裝配不如顯式裝配精確,若是有可能,建議使用顯式裝配。

33.你能夠在Spring中注入一個null 和一個空字符串嗎?

能夠。

34.什麼是基於Java的Spring註解配置? 給一些註解的例子.

基於Java的配置,容許你在少許的Java註解的幫助下,進行你的大部分Spring配置而非經過XML文件。

以@Configuration 註解爲例,它用來標記類能夠當作一個bean的定義,被Spring IOC容器使用。另外一個例子是@Bean註解,它表示此方法將要返回一個對象,做爲一個bean註冊進Spring應用上下文。

35.Spring經常使用註解有哪些

  1. @Required 註釋應用於 bean 屬性的 setter 方法,它代表受影響的 bean 屬性在配置時必須放在 XML 配置文件中,不然容器就會拋出一個 BeanInitializationException 異常。
  2. @Autowired 註解提供了更細粒度的控制,包括在何處以及如何完成自動裝配。它的用法和@Required同樣,修飾setter方法、構造器、屬性或者具備任意名稱和/或多個參數的PN方法。
  3. @Qualifier 註解當有多個相同類型的bean卻只有一個須要自動裝配時,將@Qualifier 註解和@Autowire 註解結合使用以消除這種混淆,指定須要裝配的確切的bean。

36.使用Spring經過什麼方式訪問Hibernate?

在Spring中有兩種方式訪問Hibernate: 1. 控制反轉 Hibernate Template和 Callback。 2. 繼承 HibernateDAOSupport提供一個AOP 攔截器。

用Spring的 SessionFactory 調用 LocalSessionFactory。集成過程分三步: 1. 配置the Hibernate SessionFactory。 2. 繼承HibernateDaoSupport實現一個DAO。 3. 在AOP支持的事務中裝配。

37.Spring支持的事務管理類型

  • 編程式事務管理:這意味你經過編程的方式管理事務,給你帶來極大的靈活性,可是難維護。

  • 聲明式事務管理:這意味着你能夠將業務代碼和事務管理分離,你只需用註解和XML配置來管理事務。 >大多數Spring框架的用戶選擇聲明式事務管理,由於它對應用代碼的影響最小,所以更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理,雖然比編程式事務管理(這種方式容許你經過代碼控制事務)少了一點靈活性。

38.什麼是引入?

引入容許咱們在已存在的類中增長新的方法和屬性。

相關文章
相關標籤/搜索