深入理解微服務架構spring的各個知識點(面試必問知識點)

前言:

最近整理Spring相關的知識點(面試必問) ,在我整理的過程中,我發現自己對Spring的理解有點朦朧,因為在平時我們接受的是Spring單個的知識點或者知道但沒有代碼的支持所有有點朦朧,所以我就把Spring知識點從整體然后往局部,到最后一個一個知識點拎出來,我想有很多的朋友或者是初學的朋友和我一樣對Spring有點朦朧,所以我分享出來,寫的不完全和不好的歡迎指出

什么是spring

spring是一個開源框架,spring為簡化企業級開發而生,使用spring可以使簡單的java bean 實現以前只有EJG才能實現的功能。

Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

spring的特點

?◆ 輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并?且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于Spring的特定類。?

◆ 控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦?合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不?是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。?

◆ 面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的?業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們?并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。?

◆ 容器——Spring包含并管理應用對象的配置和生命周期,在這個意義上它是?一種容器,你可以配置你的每個bean如何被創建——基于一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生?成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同于傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。?

◆ 框架——Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。?Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。

Spring包括哪些內容

?核心技術?IoC?和?AOP?

數據訪問?(持久層解決方案)

Web層解決方案??SpringMVC?

集成?(整合其他開源框架)

?使用Spring有什么好處

◆Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的?framework,你會發現Spring關注了遺留下的問題,。?

◆Spring能消除在許多工程上對Singleton的過多使用。根據我的經驗,這是一個主要的問題,它減少了系統的可測試性和面向對象特性。?

◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個應用和工程中,可通過一種?一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可?很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。?

◆Spring能通過接口而不是類促進好的編程習慣,減少編程代價到幾乎為零。?

◆Spring被設計為讓使用它創建的應用盡可能少的依賴于他的APIs。在Spring應用中的大多數業務對象沒有依賴于Spring。?

◆使用Spring構建的應用程序易于單元測試。?

◆Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local?EJBs來實現業務接口,卻不會影響調用代碼。?

◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應用。例如,Spring能使用?AOP提供聲明性事務而不通過使用EJB容器,如果你僅僅需要與單個的數據庫打交道,甚至不需要JTA實現。?

■Spring為數據存取提供了一致的框架,不論是使用JDBC或O/R?mapping產品(如Hibernate)。?

Spring確實使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。?

總結起來,Spring有如下優點:?

◆低侵入式設計,代碼污染極低?

◆?獨立于各種應用服務器,可以真正實現Write?Once,Run?Anywhere的承諾?

◆Spring的DI機制降低了業務對象替換的復雜性?

◆Spring并不完全依賴于Spring,開發者可自由選用Spring框架的部分或全部

在此我向大家推薦一個架構學習交流群。交流學習群號:521353348? 里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

spring中的核心類有那些,各有什么作用

BeanFactory:產生一個新的實例,可以實現單例模式?

BeanWrapper:提供統一的get及set方法?

ApplicationContext:提供框架的實現,包括BeanFactory的所有功能?

spring常用的類和接口有哪些

A:ApplicationContextAware接口?

當一個類需要獲取ApplicationContext實例時,可以讓該類實現ApplicationContextAware接口。?

B:ApplicationEvent抽象類?

當需要創建自定義事件時,可以新建一個繼承自ApplicationEvent抽象類的類。?

C:ApplicationListener接口?

當需要監聽自定義事件時,可以新建一個實現ApplicationListener接口的類,并將該類配置到Spring容器中。?

D:BeanNameAware接口?

當bean需要獲取自身在容器中的id/name時,可以實現BeanNameAware接口。?

E:InitializingBean接口?

當需要在bean的全部屬性設置成功后做些特殊的處理,可以讓該bean實現InitializingBean接口。?

效果等同于bean的init-method屬性的使用或者@PostContsuct注解的使用。?

三種方式的執行順序:先注解,然后執行InitializingBean接口中定義的方法,最后執行init-method屬性指定的方法。?

F:DisposableBean接口?

當需要在bean銷毀之前做些特殊的處理,可以讓該bean實現DisposableBean接口。?

效果等同于bean的destroy-method屬性的使用或者@PreDestory注解的使用。?

三種方式的執行順序:先注解,然后執行DisposableBean接口中定義的方法,最后執行destroy-method屬性指定的方法。?

G:BeanPostProcessor接口?

當需要對受管bean進行預處理時,可以新建一個實現BeanPostProcessor接口的類,并將該類配置到Spring容器中。?

H:BeanFactoryPostProcessor接口?

當需要對Bean工廠進行預處理時,可以新建一個實現BeanFactoryPostProcessor接口的類,并將該類配置到Spring容器中。?

spring事務的原理

事務管理的方式:編程型和聲明型,spring推薦使用后一種方式?

聲明型事務管理的優勢非常明顯:代碼中無需關于關注事務邏輯,讓Spring聲明式事務管理負責事務邏輯,聲明式事務管理無需與具體的事務邏輯耦?合,可以方便地在不同事務邏輯之間切換。?

什么是IOC,什么又是DI,他們有什么區別

依賴注入DI是一個程序設計模式和架構模型,?一些時候也稱作控制反轉,盡管在技術上來講,依賴注入是一個IOC的特殊實現,依賴注入是指一個對象應用另外一個對象來提供一個特殊的能力,例如:把一個?數據庫連接已參數的形式傳到一個對象的結構方法里面而不是在那個對象內部自行創建一個連接。控制反轉和依賴注入的基本思想就是把類的依賴從類內部轉化到外?部以減少依賴?

應用控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體,將其所依賴的對象的引用,傳遞給它。也可以說,依賴被注入到對象中。所?以,控制反轉是,關于一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。

Bean注入屬性的幾種方式

什么是aop,aop的作用是什么

面向切面編程(AOP)提供另外一種角度來思考程序結構,通過這種方式彌補了面向對象編程(OOP)的不足,除了類(classes)以外,AOP提供了切面。切面對關注點進行模塊化,例如橫切多個類型和對象的事務管理?

Spring的一個關鍵的組件就是AOP框架,可以自由選擇是否使用AOP?提供聲明式企業服務,特別是為了替代EJB聲明式服務。最重要的服務是聲明性事務管理,這個服務建立在Spring的抽象事物管理之上。允許用戶實現自定義切面,用AOP來完善OOP的使用,可以把Spring?AOP看作是對Spring的一種增強?

AOP里面重要的幾個名詞概念解釋

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

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

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

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

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

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

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

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

通知的類型:?

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

返回后通知(After?returning?advice):?在某連接點(join?point)正常完成后執行的通知:例如,一個方法沒有拋出任何異常,正常返回。?

拋出異常后通知(After?throwing?advice):?在方法拋出異常退出時執行的通知。?

后通知(After?(finally)?advice):?當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。?

環繞通知(Around?Advice):?包圍一個連接點(join?point)的通知,如方法調用。這是最強大的一種通知類型。?環繞通知可以在方法調用前后完成自定義的行為。它也會選擇是否繼續執行連接點或直接返回它們自己的返回值或拋出異常來結束執行。?

環繞通知是最常用的一種通知類型。大部分基于攔截的AOP框架,例如Nanning和JBoss4,都只提供環繞通知。?

切入點(pointcut)和連接點(join?point)匹配的概念是AOP的關鍵,這使得AOP不同于其它僅僅提供攔截功能的舊技術。?切入點使得定位通知(advice)可獨立于OO層次。?例如,一個提供聲明式事務管理的around通知可以被應用到一組橫跨多個對象中的方法上(例如服務層的所有業務操作)。?

請介紹一下Spring框架中Bean的生命周期和作用域?

(1)??bean定義?

在配置文件里面用來進行定義。?

(2)??bean初始化?

有兩種方式初始化:?

A.在配置文件中通過指定init-method屬性來完成?

B.實現org.springframwork.beans.factory.InitializingBean接口?

(3)??bean調用?

有三種方式可以得到bean實例,并進行調用?

(4)??bean銷毀?

銷毀有兩種方式?

A.使用配置文件指定的destroy-method屬性?

B.實現org.springframwork.bean.factory.DisposeableBean接口?

##作用域?

singleton?

當一個bean的作用域為singleton,?那么Spring?IoC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。?

prototype?

Prototype作用域的bean會導致在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()?方法)時都會創建一個新的bean實例。根據經驗,對所有有狀態的bean應該使用prototype作用域,而對無狀態的bean則應該使用?singleton作用域?

request?

在一次HTTP請求中,一個bean定義對應一個實例;即每次HTTP請求將會有各自的bean實例,?它們依據某個bean定義創建而成。該作用?域僅在基于web的Spring?ApplicationContext情形下有效。?

session?

在一個HTTP?Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring?

ApplicationContext情形下有效。?

global?session?

在一個全局的HTTP?Session中,一個bean定義對應一個實例。典型情況下,僅在使用portlet?

context的時候有效。該作用域僅在基于?web的Spring?ApplicationContext情形下有效。?

Bean的初始化方式有哪些

有兩種方式初始化Bean。

1、在配置文檔中通過指定init-method?屬性來完成

在Bean的類中實現一個初始化Bean屬性的方法,如init(),如:

public?class?HelloWorld{

public?String?msg=null;

public?Date?date=null;

public?void?init()?{

msg=”HelloWorld”;

date=new?Date();

}

……

}

然后,在配置文件中設置init-mothod屬性:

2、實現?org.springframwork.beans.factory.InitializingBean接口

Bean實現InitializingBean接口,并且增加?afterPropertiesSet()?方法:

public?class?HelloWorld?implement?InitializingBean?{

public?String?msg=null;

public?Date?date=null;

public?void?afterPropertiesSet()?{

msg=”向全世界問好!”;

date=new?Date();

}

……

}

那么,當這個Bean的所有屬性被Spring的BeanFactory設置完后,會自動調用afterPropertiesSet()方法對?Bean進行初始化,于是,配置文件就不用指定?init-method屬性了。

Bean的調用方式有哪些

有三種方式可以得到Bean并進行調用:

1、使用BeanWrapper

HelloWorld?hw=new?HelloWorld();

BeanWrapper?bw=new?BeanWrapperImpl(hw);

bw.setPropertyvalue(”msg”,”HelloWorld”);

system.out.println(bw.getPropertyCalue(”msg”));

2、使用BeanFactory

InputStream?is=new?FileInputStream(”config.xml”);

XmlBeanFactory?factory=new?XmlBeanFactory(is);

HelloWorld?hw=(HelloWorld)?factory.getBean(”HelloWorld”);

system.out.println(hw.getMsg());

3、使用ApplicationConttext

ApplicationContext?actx=new?FleSystemXmlApplicationContext(”config.xml”);

HelloWorld?hw=(HelloWorld)?actx.getBean(”HelloWorld”);

System.out.println(hw.getMsg());

Bean的銷毀方式有哪些

1、使用配置文件中的?destory-method?屬性

與初始化屬性?init-methods類似,在Bean的類中實現一個撤銷Bean的方法,然后在配置文件中通過?destory-method指定,那么當bean銷毀時,Spring將自動調用指定的銷毀方法。

2、實現?org.springframwork.bean.factory.DisposebleBean接口

如果實現了DisposebleBean接口,那么Spring將自動調用bean中的Destory方法進行銷毀,所以,Bean中必須提供?Destory方法。

介紹一下Spring的事務管理

事務就是對一系列的數據庫操作(比如插入多條數據)進行統一的提交或回滾操作,如果插入成功,那么一起成功,如果中間有一條出現異常,那么回滾之?前的所有操作。?

這樣可以防止出現臟數據,防止數據庫數據出現問題。?

開發中為了避免這種情況一般都會進行事務管理。Spring中也有自己的事務管理機制,一般是使用TransactionMananger進行管?理,可以通過Spring的注入來完成此功能。?

spring提供了幾個關于事務處理的類:?

TransactionDefinition?//事務屬性定義?

TranscationStatus?//代表了當前的事務,可以提交,回滾。?

PlatformTransactionManager這個是spring提供的用于管理事務的基礎接口,其下有一個實現的抽象類?AbstractPlatformTransactionManager,我們使用的事務管理類例如?DataSourceTransactionManager等都是這個類的子類。?

一般事務定義步驟:?

TransactionDefinition?td?=?new?TransactionDefinition();?

TransactionStatus?ts?=?transactionManager.getTransaction(td);?

try?

{?//do?sth?

transactionManager.commit(ts);?

}?

catch(Exception?e){transactionManager.rollback(ts);}?

spring提供的事務管理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復的代碼比較多;聲明式的比編程式的更?靈活。?

編程式主要使用transactionTemplate。省略了部分的提交,回滾,一系列的事務對象定義,需注入事務管理對象.?

void?add(){?

transactionTemplate.execute(?new?TransactionCallback(){?

pulic?Object?doInTransaction(TransactionStatus?ts)?

{?//do?sth}?

}?

}?

聲明式:?

使用TransactionProxyFactoryBean:?

PROPAGATION_REQUIRED?PROPAGATION_REQUIRED?PROPAGATION_REQUIRED,readOnly?

圍繞Poxy的動態代理?能夠自動的提交和回滾事務?

org.springframework.transaction.interceptor.TransactionProxyFactoryBean?

PROPAGATION_REQUIRED–支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。?

PROPAGATION_SUPPORTS–支持當前事務,如果當前沒有事務,就以非事務方式執行。?

PROPAGATION_MANDATORY–支持當前事務,如果當前沒有事務,就拋出異常。?

PROPAGATION_REQUIRES_NEW–新建事務,如果當前存在事務,把當前事務掛起。?

PROPAGATION_NOT_SUPPORTED–以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。?

PROPAGATION_NEVER–以非事務方式執行,如果當前存在事務,則拋出異常。?

PROPAGATION_NESTED–如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則進行與?PROPAGATION_REQUIRED類似的操作。?

在此我向大家推薦一個架構學習交流群。交流學習群號:521353348 ?里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

為什么要有事務傳播行為

Spring里面如何配置數據庫驅動

使用”org.springframework.jdbc.datasource.DriverManagerDataSource”數據源來配置數據庫驅動。示例如下:?


Spring里面applicationContext.xml文件能不能改成其他文件名

ContextLoaderListener是一個ServletContextListener,?它在你的web應用啟動的時候初始化。缺省情況下,?它會在WEB-INF/applicationContext.xml文件找Spring的配置。?你可以通過定義一個元素名字為”contextConfigLocation”來改變Spring配置文件的?位置。示例如下:?



如何在web應用里面配置spring

在web.xml中加入如下同容,在啟動web服務器時加載/WEB-INF/applicationContext.xml中的內容。?

通過如下類得到ApplicationContext實例?

????WebApplicationContextUtils.getWebApplicationContext?

Spring里面如何定義hibernate?mapping

添加hibernate?mapping?文件到web/WEB-INF目錄下的applicationContext.xml文件里面。示例如下:?


spring中的BeanFactory與ApplicationContext的作用有哪些

1.?BeanFactory負責讀取bean配置文檔,管理bean的加載,實例化,維護bean之間的依賴關系,負責bean的聲明周期。?

2.?ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能:?

a.?國際化支持?

b.?資源訪問:Resource?rs?=?ctx.?getResource(”classpath:config.properties”),? “file:c:/config.properties”?

c.?事件傳遞:通過實現ApplicationContextAware接口?

3.?常用的獲取ApplicationContext的方法:?

FileSystemXmlApplicationContext:從文件系統或者url指定的xml配置文件創建,參數為配置文件名或文件名數?組?

ClassPathXmlApplicationContext:從classpath的xml配置文件創建,可以從jar包中讀取配置文件?

WebApplicationContextUtils:從web應用的根目錄讀取配置文件,需要先在web.xml中配置,可以配置監聽器或者?servlet來實現?

這兩種方式都默認配置文件為web-inf/applicationContext.xml,也可使用context-param指定配置文件?

BeanFactory?接口?和?ApplicationContext?接口區別?

*?ApplicationContext?接口繼承?BeanFactory?接口?,Spring核心工廠是BeanFactory?,BeanFactory?采取延遲加載,第一次getBean時才會初始化Bean?,?ApplicationContext?是會在加載配置文件時初始化Bean?

*?ApplicationContext是對BeanFactory擴展

國際化處理

事件傳遞

Bean自動裝配

各種不同應用層的Context實現

開發中基本都在使用ApplicationContext,?web項目使用WebApplicationContext?,很少用到BeanFactory?

BeanFactory?beanFactory?=?new?XmlBeanFactory(new?ClassPathResource("applicationContext.xml"));

IHelloService?helloService?=?(IHelloService)?beanFactory.getBean("helloService");

helloService.sayHello();

如何在web環境中配置applicationContext.xml文件


如何在spring中實現國際化

在applicationContext.xml加載一個bean?

??在src目錄下建多個properties文件?

??對于非英文的要用native2ascii?-encoding?gb2312?源?目轉化文件相關內容?

??其命名格式是message_語言_國家。?

??頁面中的中顯示提示信息,鍵名取鍵值。?

??當給定國家,系統會自動加載對應的國家的properties信息。?

??通過applictionContext.getMessage(“鍵名”,”參數”,”區域”)取出相關的信息。?

Spring如何處理線程并發問題

Spring使用ThreadLocal解決線程安全問題

我們知道在一般情況下,只有無狀態的Bean才可以在多線程環境下共享,在Spring中,絕大部分Bean都可以聲明為singleton作用域。就是因為Spring對一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非線程安全狀態采用ThreadLocal進行處理,讓它們也成為線程安全的狀態,因為有狀態的Bean就可以在多線程中共享了。

ThreadLocal和線程同步機制都是為了解決多線程中相同變量的訪問沖突問題。

在同步機制中,通過對象的鎖機制保證同一時間只有一個線程訪問變量。這時該變量是多個線程共享的,使用同步機制要求程序慎密地分析什么時候對變量進行讀寫,什么時候需要鎖定某個對象,什么時候釋放對象鎖等繁雜的問題,程序設計和編寫難度相對較大。

而ThreadLocal則從另一個角度來解決多線程的并發訪問。ThreadLocal會為每一個線程提供一個獨立的變量副本,從而隔離了多個線程對數據的訪問沖突。因為每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,可以把不安全的變量封裝進ThreadLocal。

由于ThreadLocal中可以持有任何類型的對象,低版本JDK所提供的get()返回的是Object對象,需要強制類型轉換。但JDK5.0通過泛型很好的解決了這個問題,在一定程度地簡化ThreadLocal的使用。

概括起來說,對于多線程資源共享的問題,同步機制采用了“以時間換空間”的方式,而ThreadLocal采用了“以空間換時間”的方式。前者僅提供一份變量,讓不同的線程排隊訪問,而后者為每一個線程都提供了一份變量,因此可以同時訪問而互不影響。

在此我向大家推薦一個架構學習交流群。交流學習群號:521353348 里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

簡單敘述一下Spring?中BeanFactory與ApplicationContext的差別

使用?BeanFactory?從?xml配置文件加載bean:??

簡而言之,BeanFactory?提供了配置框架和基本的功能,?而ApplicationContext?為它增加了更強的功能,這些功能中的一些或許更加接近J2EE?并且圍繞企業級應用。一般來說,ApplicationContext是?BeanFactory?的完全超集,?任何?BeanFactory?功能和行為的描述也同樣被認為適用于ApplicationContext?

相對于?BeanFactory?而言,ApplicationContext?提供了以下擴展功能.?

(a)?國際化支持??

(b)?資源訪問?

(c)?事件傳播??

(d)?多實例加載?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • IOC和DI是什么? Spring IOC 的理解,其初始化過程? BeanFactory 和 FactoryBe...
    justlpf閱讀 3,484評論 1 21
  • 什么是Spring Spring是一個開源的Java EE開發框架。Spring框架的核心功能可以應用在任何Jav...
    jemmm閱讀 16,501評論 1 133
  • 第一次畫動物,被原圖萌的不行。就臨摹了。眼睛的手動留白沒畫好,后邊用了留白液,效果不太好。以后會多嘗試這種萌系畫風
    如琳閱讀 175評論 0 0
  • 2017年8月19日 周六 晴 欣賞自己:每個人的生活都不會一帆風順,我們要做的就是堅強,努力讓自己快速變強,才能...
    紅琳923閱讀 195評論 0 0