Spring的一些理解

1、什么是Spring框架?Spring框架有哪些主要模塊?

spring是一個開源框架,讓java開發(fā)模塊化,并且全面。貫穿邏輯層,表現(xiàn)層,持久層。讓每一個功能模塊都可以獨(dú)立分開,降低耦合,提高代碼復(fù)用率!spring通過控制反轉(zhuǎn)降低耦合性,一個對象的依賴通過被動注入的方式而非主動new還包括面向切面, mvc的整合等.
框架:讓通用的流程規(guī)范化,繁瑣的流程自動化.(通過注解,反射,字節(jié)碼生成)
主要模塊:

Spring Core: 提供ioc和依賴注入特性
Spring Context: 上下文,提供國際化的支持,事件傳播,資源裝載
Spring Dao:提供JDBC抽象層,聲明式事務(wù).
Spring ORM:對象關(guān)系型映射的集成層.
Spring Web:提供了基礎(chǔ)的Web開發(fā)的集成特性.
Spring MVC:模型分離.
Spring AOP: 面向切面編程

2.談?wù)勀銓oc/DI的理解

IoC 就是將原本在程序中手動創(chuàng)建對象的控制權(quán),交由容器來管理,簡單說,就是創(chuàng)建對象控制權(quán)被反轉(zhuǎn)到了Spring框架

DI 是在容器負(fù)責(zé)創(chuàng)建Bean對象時,動態(tài)的將依賴對象注入到Bean組件

依賴注入的方式(bean的屬性注入)

1.構(gòu)造器注入 2.setter方法注入 3.xml


image.png

3.BeanFactory 接口和 ApplicationContext 接口有什么區(qū)別 ?

BeanFactory 可以理解為含有bean集合的工廠類。

①ApplicationContext 是BeanFactory的子接口,Spring核心工廠是BeanFactory(springioc具體實現(xiàn)) ,BeanFactory采取延遲加載,第一次getBean時才會初始化Bean, ApplicationContext是會在加載配置文件時初始化Bean。
②ApplicationContext是對BeanFactory擴(kuò)展,它可以進(jìn)行國際化處理、事件傳遞和bean自動裝配以及各種不同應(yīng)用層的Context實現(xiàn)
開發(fā)中基本都在使用ApplicationContext, web項目使用WebApplicationContext ,很少用到BeanFactory

4.Spring的幾種配置方式

1.基于XML的配置
2.基于注解的配置
3.基于Java的配置

5.介紹spring中bean的生命周期和作用域

  • 定義: 通過<bean></bean>
  • 初始化: 配置文件init-method屬性,或InitializingBean回調(diào)接口
  • bean的調(diào)用:
  • 銷毀: 配置文件destory-method,DisposeableBean接口


    0930070.png

作用域
singleton(提供一個共享的實例)
prototype(每次提供一個新的bean實例)
request (每個http請求有各自的實例,在applicationcontext下)
session:
global-session:

  • 單例bean沒有實現(xiàn)線程安全的操作,但是大部分場景安全,因為大部分bean沒有可變的狀態(tài).

讀取Bean

//1.ClassPathXmlApplicationContext:從類路徑中加載。  
//2.FileSystemXmlApplicationContext:從文件系統(tǒng)加載。  
//3.fatory.getbean
ApplicationContext ac=new ClassPathXmlApplicationContext("com/lc/collection/beans.xml");  
Department department=(Department) ac.getBean("department");  

6.如何在spring中注入一個集合

<list> : 該標(biāo)簽用來裝配可重復(fù)的list值。
<set> : 該標(biāo)簽用來裝配沒有重復(fù)的set值。
<map>: 該標(biāo)簽可用來注入鍵和值可以為任何類型的鍵值對。
<props> : 該標(biāo)簽支持注入鍵和值都是字符串類型的鍵值對。

7.Spring中用到哪些設(shè)計模式

代理模式—在AOP和remoting中被用的比較多。
單例模式—在spring配置文件中定義的bean默認(rèn)為單例模式。
工廠模式—BeanFactory用來創(chuàng)建對象的實例。
模板方法—用來解決代碼重復(fù)的問題。比如. RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Spring提供了DispatcherServlet來對請求進(jìn)行分發(fā)。
視圖幫助(View Helper )—Spring提供了一系列的JSP標(biāo)簽,高效宏來輔助將分散的代碼整合在視圖里。
依賴注入—貫穿于BeanFactory / ApplicationContext接口的核心理念。

8.Tomcat加載spring的流程

1.Tomcat會讀取web.xml配置.(讀<listener> <context-param>)
2.web.xml中負(fù)責(zé)啟動spring和spring mvc.
3 orm框架啟動通過sqlsessionFactory bean來啟動的。并配置各種bean到ioc容器中。包括datasource等。
4.通過設(shè)置scan package的方式,spring在啟動時候會掃描包下的所有注解,并將它們注冊到ioc容器中。

9.Spring如何處理線程并發(fā)問題

Spring使用ThreadLocal解決線程安全問題
ThreadLocal會為每一個線程提供一個獨(dú)立的變量副本,從而隔離了多個線程對數(shù)據(jù)的訪問沖突。因為每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進(jìn)行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,可以把不安全的變量封裝進(jìn)ThreadLocal。
同步機(jī)制采用了“以時間換空間”的方式,而ThreadLocal采用了“以空間換時間”的方式。前者僅提供一份變量,讓不同的線程排隊訪問,而后者為每一個線程都提供了一份變量,因此可以同時訪問而互不影響。

10.Spring AOP的理解

AOP即面向切面編程,可以說是OOP的補(bǔ)充和完善。...

15.解釋一下Spring AOP里面的幾個名詞

切面(Aspect):一個關(guān)注點的模塊化,這個關(guān)注點可能會橫切多個對象。事務(wù)管理是J2EE應(yīng)用中一個關(guān)于橫切關(guān)注點的很好的例子。 在Spring AOP中,切面可以使用通用類(基于模式的風(fēng)格) 或者在普通類中以 @Aspect 注解(@AspectJ風(fēng)格)來實現(xiàn)。

連接點(Joinpoint):在程序執(zhí)行過程中某個特定的點,比如某方法調(diào)用的時候或者處理異常的時候。 在Spring AOP中,一個連接點 總是 代表一個方法的執(zhí)行。 通過聲明一個org.aspectj.lang.JoinPoint類型的參數(shù)可以使通知(Advice)的主體部分獲得連接點信息。

通知(Advice):在切面的某個特定的連接點(Joinpoint)上執(zhí)行的動作。通知有各種類型,其中包括“around”、“before”和“after”等通知。 通知的類型將在后面部分進(jìn)行討論。許多AOP框架,包括Spring,都是以攔截器做通知模型, 并維護(hù)一個以連接點為中心的攔截器鏈。

切入點(Pointcut):匹配連接點(Joinpoint)的斷言。通知和一個切入點表達(dá)式關(guān)聯(lián),并在滿足這個切入點的連接點上運(yùn)行(例如,當(dāng)執(zhí)行某個特定名稱的方法時)。 切入點表達(dá)式如何和連接點匹配是AOP的核心:Spring缺省使用AspectJ切入點語法。

引入(Introduction):(也被稱為內(nèi)部類型聲明(inter-type declaration))。聲明額外的方法或者某個類型的字段。 Spring允許引入新的接口(以及一個對應(yīng)的實現(xiàn))到任何被代理的對象。例如,你可以使用一個引入來使bean實現(xiàn) IsModified 接口,以便簡化緩存機(jī)制。

目標(biāo)對象(Target Object): 被一個或者多個切面(aspect)所通知(advise)的對象。也有人把它叫做 被通知(advised) 對象。 既然Spring AOP是通過運(yùn)行時代理實現(xiàn)的,這個對象永遠(yuǎn)是一個 被代理(proxied) 對象。

AOP代理(AOP Proxy): AOP框架創(chuàng)建的對象,用來實現(xiàn)切面契約(aspect contract)(包括通知方法執(zhí)行等功能)。 在Spring中,AOP代理可以是JDK動態(tài)代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)風(fēng)格和@AspectJ注解風(fēng)格的切面聲明,對于使用這些風(fēng)格的用戶來說,代理的創(chuàng)建是透明的。

織入(Weaving):把切面(aspect)連接到其它的應(yīng)用程序類型或者對象上,并創(chuàng)建一個被通知(advised)的對象。 這些可以在編譯時(例如使用AspectJ編譯器),類加載時和運(yùn)行時完成。 Spring和其他純Java AOP框架一樣,在運(yùn)行時完成織入。

16.通知有哪些類型?

前置通知(Before advice):在某連接點(join point)之前執(zhí)行的通知,但這個通知不能阻止連接點前的執(zhí)行(除非它拋出一個異常)。

返回后通知(After returning advice):在某連接點(join point)正常完成后執(zhí)行的通知:例如,一個方法沒有拋出任何異常,正常返回。 拋出異常后通知(After throwing advice):在方法拋出異常退出時執(zhí)行的通知。 后通知(After (finally) advice):當(dāng)某連接點退出的時候執(zhí)行的通知(不論是正常返回還是異常退出)。 環(huán)繞通知(Around Advice):包圍一個連接點(join point)的通知,如方法調(diào)用。這是最強(qiáng)大的一種通知類型。 環(huán)繞通知可以在方法調(diào)用前后完成自定義的行為。它也會選擇是否繼續(xù)執(zhí)行連接點或直接返回它們自己的返回值或拋出異常來結(jié)束執(zhí)行。 環(huán)繞通知是最常用的一種通知類型。大部分基于攔截的AOP框架,例如Nanning和JBoss4,都只提供環(huán)繞通知。 切入點(pointcut)和連接點(join point)匹配的概念是AOP的關(guān)鍵,這使得AOP不同于其它僅僅提供攔截功能的舊技術(shù)。 切入點使得定位通知(advice)可獨(dú)立于OO層次。 例如,一個提供聲明式事務(wù)管理的around通知可以被應(yīng)用到一組橫跨多個對象中的方法上(例如服務(wù)層的所有業(yè)務(wù)操作)。

17.在配置文件中,如果使用占位符,值寫在properties中,那么初始化bean的時候,數(shù)據(jù)是什么時候被替代的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容