Spring事務(wù)管理方式有兩種
1) 編程式事務(wù):以java編碼的方式來實(shí)現(xiàn)事務(wù)的管理。基本不使用。
2) 聲明式事務(wù):只需要申明配置事務(wù)的處理方式,spring會(huì)自動(dòng)進(jìn)行事務(wù)管理。
a. 事務(wù)管理器
b. 事務(wù)的傳播特性:事務(wù)的傳播特性用來定義事務(wù)中又存在事務(wù)的情況下,該如何來處理事務(wù)。(Service層方法調(diào)用service層方法時(shí))
a) Required:必須,必須有一個(gè)事務(wù),如果沒有,則會(huì)開啟一個(gè)事務(wù)。如果有,則使用當(dāng)前事務(wù)。(默認(rèn))
b) Requireds_new:(需要自己的新的事務(wù)) 必須運(yùn)行在自己的事務(wù)中,即使當(dāng)前方法存在一個(gè)事務(wù),也會(huì)新建一個(gè)自己的事務(wù)。執(zhí)行本身事務(wù)時(shí),會(huì)將外部事務(wù)掛起。
c) Nested:(嵌套)可以多個(gè)事務(wù)嵌套在一起,內(nèi)部事務(wù)不會(huì)影響外部事務(wù),外部事務(wù)回滾,會(huì)影響到內(nèi)部事務(wù)回滾。
d) Mandtory: (必須有事務(wù))要求必須有事務(wù),沒有事務(wù)就拋出異常。
e) Never:(永不) 不支持事務(wù),有事務(wù)就拋出異常。
f) Supports:(支持) 如果 有事務(wù)和沒有事務(wù)都支持。
g) not_supported :(不支持事務(wù)),有事務(wù)存在,便不運(yùn)行,直到事務(wù)提交后再執(zhí)行。
1、為什么人們會(huì)猶豫使用微服務(wù)?
我見過許多開發(fā)者在這個(gè)問題上摸索。畢竟,在面試微服務(wù)架構(gòu)師角色時(shí),他們會(huì)被問到這個(gè)問題,所以承認(rèn)它的缺點(diǎn)可能有點(diǎn)棘手。以下是一些很好的答案:
它們需要大量協(xié)作 - 微服務(wù)需要大量的合作。不同的微服務(wù)模塊,可能分散在不同的團(tuán)隊(duì),團(tuán)隊(duì)之間需要始終保持良好的同步。
他們需要建立繁重的架構(gòu) - 系統(tǒng)是分布式的,架構(gòu)涉及很多。 他們需要過多的計(jì)劃來處理操作開銷 - 如果您計(jì)劃使用微服務(wù)架構(gòu),則需要為操作開銷做好準(zhǔn)備。 需要熟練的專業(yè)人員,他們可以支持異構(gòu)分布的微服務(wù)。
2、Spring Cloud 是什么
1、 Spring Cloud是一系列框架的有序集合。它利用SpringBoot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、智能路由、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。
2、 Spring Cloud并沒有重復(fù)制造輪子,它只是將各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過SpringBoot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
1、 Spring的 IOC和AOP機(jī)制 ?
2、 Spring中 `@Autowired` 和 `@Resource` 注解的區(qū)別?
3、依賴注入的方式有幾種,各是什么?
4、講一下什么是 Spring ?
5、 Spring的AOP理解:
6、Spring的IOC理解
7、解釋一下 Spring bean的生命周期
8、 解釋Spring支持的幾種bean的作用域
9、 Spring基于xml注入bean的幾種方式:
10、Spring框架中都用到了哪些設(shè)計(jì)模式?
11、聊一聊Spring中@Transactional注解及其失效的六種場景
12、Spring AOP(思想)以及AspectJ框架(重點(diǎn))
in spring,春季的意思。季節(jié)前是用in
Java Spring是一個(gè)輕量級(jí)的應(yīng)用開發(fā)框架,它提供了一種實(shí)現(xiàn)企業(yè)級(jí)Java應(yīng)用的全面解決方案。Spring框架的核心特點(diǎn)包括:
IoC(Inversion of Control,控制反轉(zhuǎn))是Spring框架的核心概念之一,它通過將對(duì)象之間的依賴關(guān)系交由框架來管理,降低了代碼之間的耦合性。DI(Dependency Injection,依賴注入)是IoC的一種實(shí)現(xiàn)方式,通過將依賴的對(duì)象注入到需要的地方,避免了手動(dòng)創(chuàng)建對(duì)象的過程。
區(qū)別在于,IoC是一種設(shè)計(jì)原則,而DI則是IoC的具體實(shí)現(xiàn)方式之一。實(shí)現(xiàn)IoC的方式有多種,而DI是其中最常見、也是最常用的一種方式。在Spring框架中,通過使用DI,我們可以通過構(gòu)造器、方法參數(shù)、屬性等方式注入依賴,從而實(shí)現(xiàn)對(duì)象之間的解耦。
在Spring中,Bean的作用域包括Singleton、Prototype、Request、Session和Global Session等。
區(qū)別在于,Singleton作用域在整個(gè)應(yīng)用中只有一個(gè)實(shí)例,而Prototype每次請(qǐng)求都會(huì)創(chuàng)建新的實(shí)例。Request作用域在每個(gè)HTTP請(qǐng)求中實(shí)例化,而Session作用域則是在每個(gè)用戶會(huì)話中實(shí)例化。Global Session作用域主要用于基于集群的Web應(yīng)用。
Spring AOP是Spring框架的一部分,用于實(shí)現(xiàn)面向切面編程,處理系統(tǒng)中的橫切關(guān)注點(diǎn)。與OOP(面向?qū)ο缶幊蹋┫啾龋珹OP關(guān)注的是系統(tǒng)中的功能模塊,而OOP關(guān)注的是對(duì)象的封裝、繼承和多態(tài)性。
在面向?qū)ο缶幊讨校茈y避免一些橫切關(guān)注點(diǎn)(如日志記錄、事務(wù)管理等)的重復(fù)代碼出現(xiàn)。而通過使用AOP,我們可以通過將這些橫切關(guān)注點(diǎn)從核心業(yè)務(wù)邏輯中分離出來,使代碼更加清晰、易于維護(hù),并提高代碼的復(fù)用性。
在Spring中,事務(wù)的傳播行為由@Transactional注解來指定,包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED和NEVER等。
各自特點(diǎn)在于,REQUIRED和SUPPORTS都會(huì)加入當(dāng)前存在的事務(wù),但REQUIRES_NEW會(huì)創(chuàng)建一個(gè)新的事務(wù)并掛起當(dāng)前事務(wù),MANDATORY要求當(dāng)前存在事務(wù),否則會(huì)拋出異常。NOT_SUPPORTED和NEVER都是非事務(wù)方式執(zhí)行操作,區(qū)別在于NOT_SUPPORTED會(huì)掛起當(dāng)前事務(wù),而NEVER會(huì)直接拋出異常。
要配置Spring的聲明式事務(wù)管理,需要通過以下步驟:
<tx:annotation-driven />
,啟用基于注解的事務(wù)管理。<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
配置一個(gè)事務(wù)管理器。@Transactional
注解,指定事務(wù)的傳播行為、隔離級(jí)別等屬性。Spring Boot是基于Spring框架的快速應(yīng)用開發(fā)框架,它通過提供腳手架、自動(dòng)化配置等方式簡化了Spring應(yīng)用的開發(fā)流程。
與傳統(tǒng)的Spring框架相比,Spring Boot具有以下區(qū)別:
通過本文,我們對(duì)Java Spring框架進(jìn)行了詳細(xì)介紹,并解析了一些常見的Spring面試題。希望本文能為您在面試中的準(zhǔn)備提供一些幫助。感謝您的閱讀!
題主所謂的Spring"其他"指的是Spring Framework、Spring Data、Spring Security,Spring Cloud,Spring Cloud Data Flow....這些嗎?
只要你訪問Spring官網(wǎng),最大最重要的一幅圖,已經(jīng)把Spring學(xué)習(xí)和使用的路線圖清晰的展示給你了。
上圖從左到右分別是:從左到右分別是Spring Boot,Spring Cloud,Spring Cloud Data Flow。Spring Cloud Data Flow其實(shí)又暗含著Spring Integration和Spring Batch兩部分。
如果把“直接學(xué)”理解成從Spring Boot學(xué)起,然后再學(xué)“spring其他”,這樣肯定沒問題。
如果把“直接學(xué)”理解成只學(xué)Spring Boot,“spring其他”都不學(xué),這樣肯定不行。
Spring Boot是為了讓你快速搭建一個(gè)Spring的項(xiàng)目,把Spring的所有Project(也就是題主說的其他)整合在一起。Boot就是啟動(dòng)引導(dǎo)的意思。
Spring Boot 不是Spring Framework的升級(jí)換代技術(shù),而是由于Spring下面的項(xiàng)目太多,雖然不用XML配置了,但是當(dāng)使用多個(gè)Spring項(xiàng)目的時(shí)候配置還是比較麻煩。為了快速搭建項(xiàng)目,提供更多便利的配置項(xiàng)以及更多的默認(rèn)配置(Convention over configuration),才有的Spring Boot。
理解Spring Boot和Spring的關(guān)系,看我另外一個(gè)回答:
哪些企業(yè)或項(xiàng)目在用Spring boot,或者它會(huì)在多大程度上替代Spring?如果整體看Spring體系下的Java Web技術(shù)的話,JSP、Servlet是基礎(chǔ),中間是Spring Framework為主的"其他",然后最上層是Spring Boot。就是下面這副圖:
上面這幅圖的解釋在我另一個(gè)答案里:
spring MVC過時(shí)了嗎?如果有JSP和Servlet基礎(chǔ),然后直接學(xué)Spring Boot,相當(dāng)于沒有中間層的支持。而且,用Spring開發(fā),你不會(huì)直接去寫Servlet。如果是前后端分離,你也用不上JSP。所以"其他"還是非常重要的。
我知道,提出這個(gè)問題以及關(guān)心這個(gè)問題的人都是初學(xué)者,你們幻想那種既學(xué)的少又用處大的東西。Spring Boot可以幫助你們快速啟動(dòng)(Boot)一個(gè)工程,方便配置,但是后續(xù)的核心功能還是依靠“spring其他”的。
區(qū)別就是兩者都是介詞+名詞spring短語,具體的不同如下
at spring只用于At Spring Festival, 中文意思是在春節(jié)
At Spring Festival, we have a big family dinner.
in spring中文意思是在春天
In spring the countryside bursts into life.鄉(xiāng)村在春天生機(jī)盎然。
1、Spring:是一個(gè)生態(tài)體系(也可以說是技術(shù)體系),是集大成者,它包含了Spring Framework、Spring Boot、Spring Cloud等(還包括Spring Cloud data flow、spring data、spring integration、spring batch、spring security、spring hateoas),是一站式的輕量級(jí)的java開發(fā)框架,核心是控制反轉(zhuǎn)(IOC)和面向切面(AOP),針對(duì)于開發(fā)的WEB層(springMvc)、業(yè)務(wù)層(Ioc)、持久層(jdbcTemplate)等都提供了多種配置解決方案。
2、SpringCloud:大部分的功能插件都是基于springBoot去實(shí)現(xiàn)的,springCloud關(guān)注于全局的微服務(wù)整合和管理,將多個(gè)springBoot單體微服務(wù)進(jìn)行整合以及管理; springCloud依賴于springBoot開發(fā),而springBoot可以獨(dú)立開發(fā)。
spring和spring boot二者主要區(qū)別是:
1、Spring Boot提供極其快速和簡化的操作,讓 Spring 開發(fā)者快速上手。
2、Spring Boot提供了 Spring 運(yùn)行的默認(rèn)配置。
3、Spring Boot為通用 Spring項(xiàng)目提供了很多非功能性特性,例如:嵌入式 Serve、Security、統(tǒng)計(jì)、健康檢查、外部配置等等。
Spring是一個(gè)開放源代碼的設(shè)計(jì)層面框架,他解決的是業(yè)務(wù)邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個(gè)系統(tǒng)應(yīng)用。Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開發(fā)框架,由Rod Johnson創(chuàng)建。簡單來說,Spring是一個(gè)分層的JavaSE/EE full-stack(一站式) 輕量級(jí)開源框架。它定位的領(lǐng)域是許多其他流行的framework沒有的。Spring致力于提供一種方法管理你的業(yè)務(wù)對(duì)象。
1、SpringBoot只是一個(gè)快速開發(fā)框架,使用注解簡化了xml配置,內(nèi)置了Servlet容器,以Java應(yīng)用程序進(jìn)行執(zhí)行。
2、SpringCloud是一系列框架的集合,可以包含SpringBoot。
SpringBoot:是一個(gè)快速開發(fā)框架,通過用MAVEN依賴的繼承方式,幫助我們快速整合第三方常用框架,完全采用注解化(使用注解方式啟動(dòng)SpringMVC),簡化XML配置,內(nèi)置HTTP服務(wù)器(Tomcat,Jetty),最終以Java應(yīng)用程序進(jìn)行執(zhí)行。
SpringCloud: 是一套目前完整的微服務(wù)框架,它是是一系列框架的有序集合。它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過SpringBoot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。它利用Spring Boot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。