国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java知識復習(八)Spring基礎(chǔ)

這篇具有很好參考價值的文章主要介紹了Java知識復習(八)Spring基礎(chǔ)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、什么是Spring框架?

  • Spring :是一款開源的輕量級 Java 開發(fā)框架,旨在提高開發(fā)人員的開發(fā)效率以及系統(tǒng)的可維護性
    Java知識復習(八)Spring基礎(chǔ)

2、Spring、SpringMVC和SpringBoot的區(qū)別

  • Spring主要指Spring Framework,就是指如上圖所示的各項功能模塊
  • SpringMVC主要指一種架構(gòu),MVC分別是Model模型、View視圖、Controller控制器的簡寫,核心思想就是將數(shù)據(jù)、顯示和業(yè)務(wù)邏輯分離來組織代碼。
  • SpringBoot旨在簡化Spring開發(fā),減少各種麻煩的配置文件,盡量做到開箱即用

3、Spring IoC

  • IoC:(Inversion of Control:控制反轉(zhuǎn)) 是一種設(shè)計思想,而不是一個具體的技術(shù)實現(xiàn)。IoC 的思想就是將原本在程序中手動創(chuàng)建對象的控制權(quán),交由 Spring 框架來管理
  • 控制:指的是對象創(chuàng)建(實例化、管理)的權(quán)力
  • 反轉(zhuǎn):控制權(quán)交給外部環(huán)境(Spring 框架、IoC 容器)
  • 簡單來說,就是將對象的創(chuàng)建、依賴注入等操作交給Spring容器處理,而不是在應(yīng)用程序中手動創(chuàng)建和管理對象。
  • 在傳統(tǒng)的應(yīng)用程序中,對象之間的依賴關(guān)系通常是通過手動創(chuàng)建對象、調(diào)用構(gòu)造方法或者工廠類來完成的。這種方式會導致應(yīng)用程序的代碼與具體的實現(xiàn)細節(jié)耦合在一起,難以進行單元測試和維護,而且代碼的可讀性和可復用性也比較差。
  • 而使用Spring的IOC容器,可以將對象之間的依賴關(guān)系從應(yīng)用程序代碼中抽離出來,通過XML配置或者注解方式來描述對象之間的關(guān)系,由Spring容器自動創(chuàng)建和管理對象。這樣可以有效地降低應(yīng)用程序的耦合度,提高代碼的可讀性和可維護性,同時也方便單元測試和擴展。

4、Spring Bean

1、簡介

  • 簡單來說,Bean 代指的就是那些被 IoC 容器所管理的對象
  • 當我們使用Spring框架時,我們需要將Java對象交給Spring容器進行管理,這些對象就被稱為Spring Bean。Spring容器會負責創(chuàng)建、配置和管理這些Bean,以及將它們注入到其他Bean中。
  • Bean對象的創(chuàng)建和管理是基于IoC(Inversion of Control,控制反轉(zhuǎn))和DI(Dependency Injection,依賴注入)的思想實現(xiàn)的。
  • 我們需要告訴 IoC 容器幫助我們管理哪些對象,這個是通過配置元數(shù)據(jù)來定義的。配置元數(shù)據(jù)可以是 XML 文件、注解或者 Java 配置類
  • SpringBean默認下是單例模式

2、將類聲明為Bean的常用注解如下

  • @Component :通用的注解,可標注任意類為 Spring 組件
  • @Repository : 對應(yīng)持久層即 Dao 層,主要用于數(shù)據(jù)庫相關(guān)操作
  • @Service : 對應(yīng)服務(wù)層,主要涉及一些復雜的邏輯,需要用到 Dao 層
  • @Controller : 對應(yīng) Spring MVC 控制層,主要用戶接受用戶請求并調(diào)用 Service 層返回數(shù)據(jù)給前端頁面
  • @Bean:常和@Configuration注解搭配使用,用于顯式聲明單個bean,而不是讓Spring像上面一樣自動執(zhí)行,可以更精細地自定義配置;一般用來注解方法,但其返回值是對象

3、注入Bean的常用注解如下

  • @Autowired:Autowired 屬于 Spring 內(nèi)置的注解,默認的注入方式為byType(根據(jù)類型進行匹配),也就是說會優(yōu)先根據(jù)接口類型去匹配并注入 Bean (接口的實現(xiàn)類)
  • @Resource:@Resource屬于 JDK 提供的注解,默認注入方式為 byName。如果無法通過名稱匹配到對應(yīng)的 Bean 的話,注入方式會變?yōu)閎yType

4、Bean的生命周期

  • Bean 容器找到配置文件中 Spring Bean 的定義,Bean 容器利用 Java Reflection API 創(chuàng)建一個 Bean 的實例
  • 如果涉及到一些屬性值 利用 set()方法設(shè)置一些屬性值
  • 如果 Bean 實現(xiàn)了 BeanNameAware 接口,調(diào)用 setBeanName()方法,傳入 Bean 的名字
  • 與上面的類似,如果實現(xiàn)了其他 *.Aware接口,就調(diào)用相應(yīng)的方法
  • 如果有和加載這個 Bean 的 Spring 容器相關(guān)的 BeanPostProcessor 對象,執(zhí)行postProcessBeforeInitialization() 方法
  • 如果 Bean 實現(xiàn)了InitializingBean接口,執(zhí)行afterPropertiesSet()方法
  • 如果 Bean 在配置文件中的定義包含 init-method 屬性,執(zhí)行指定的方法
  • 如果有和加載這個 Bean 的 Spring 容器相關(guān)的 BeanPostProcessor 對象,執(zhí)行postProcessAfterInitialization() 方法
  • 當要銷毀 Bean 的時候,如果 Bean 實現(xiàn)了 DisposableBean 接口,執(zhí)行 destroy() 方法
  • 當要銷毀 Bean 的時候,如果 Bean 在配置文件中的定義包含 destroy-method 屬性,執(zhí)行指定的方法

總結(jié)起來,Spring的生命周期其實就是四個過程:實例化、屬性賦值、初始化前后、銷毀前后

  • 實例化:第 1 步,實例化一個 bean 對象;
  • 屬性賦值:第 2 步,為 bean 設(shè)置相關(guān)屬性和依賴;
  • 初始化:第 3~7 步,步驟較多,其中第 5、6 步為初始化操作,第 3、4 步為在初始化前執(zhí)行,第 7 步在初始化后執(zhí)行,該階段結(jié)束,才能被用戶使用;
  • 銷毀:第 8~10步,第8步不是真正意義上的銷毀(還沒使用呢),而是先在使用前注冊了銷毀的相關(guān)調(diào)用接口,為了后面第9、10步真正銷毀 bean 時再執(zhí)行相應(yīng)的方法。

5、Spring AOP

1、簡述:AOP(Aspect-Oriented Programming:面向切面編程)能夠?qū)⒛切┡c業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責任(例如事務(wù)處理、日志管理、權(quán)限控制等)封裝起來,便于減少系統(tǒng)的重復代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護性,其實現(xiàn)原理就是動態(tài)代理

2、相關(guān)知識點

  • 目標(Target):被通知的對象
  • 代理(Proxy):向目標對象應(yīng)用通知之后創(chuàng)建的代理對象
  • 連接點(JoinPoint):目標對象的所屬類中,定義的所有方法均為連接點
  • 切入點(Pointcut):被切面攔截 / 增強的連接點(切入點一定是連接點,連接點不一定是切入點)
  • 通知(Advice):增強的邏輯 / 代碼,也即攔截到目標對象的連接點之后要做的事情
  • 切面(Aspect):切入點(Pointcut)+通知(Advice),一個切面就是一個代理對象= 要為哪些類生成代理+要添加的額外功能是哪些
  • Weaving(織入):將通知應(yīng)用到目標對象,進而生成代理對象的過程動作

6、Spring AOP和AspectJ AOP有什么區(qū)別?

  • Spring AOP 屬于運行時增強,而 AspectJ 是編譯時增強
  • Spring AOP 基于代理(Proxying),而 AspectJ 基于字節(jié)碼操作(Bytecode Manipulation)
  • Spring AOP相對簡單,但AspectJ性能更好

7、AspectJ定義的通知類型

  • Before(前置通知):目標對象的方法調(diào)用之前觸發(fā)
  • After (后置通知):目標對象的方法調(diào)用之后觸發(fā)
  • AfterReturning(返回通知):目標對象的方法調(diào)用完成,在返回結(jié)果值之后觸發(fā)
  • AfterThrowing(異常通知) :目標對象的方法運行中拋出 / 觸發(fā)異常后觸發(fā)。AfterReturning 和 AfterThrowing 兩者互斥。如果方法調(diào)用成功無異常,則會有返回值;如果方法拋出了異常,則不會有返回值
  • Around (環(huán)繞通知):編程式控制目標對象的方法調(diào)用。環(huán)繞通知是所有通知類型中可操作范圍最大的一種,因為它可以直接拿到目標對象,以及要執(zhí)行的方法,所以環(huán)繞通知可以任意的在目標對象的方法調(diào)用前后搞事,甚至不調(diào)用目標對象的方法

8、控制多個切面的執(zhí)行順序

  1. 通常使用@Order注解直接定義切面順序
// 值越小優(yōu)先級越高
@Order(3)
@Component
@Aspect
public class LoggingAspect implements Ordered {
  1. 實現(xiàn)Ordered接口重寫getOrder方法
@Component
@Aspect
public class LoggingAspect implements Ordered {

    // ....

    @Override
    public int getOrder() {
        // 返回值越小優(yōu)先級越高
        return 1;
    }
}

9、Spring事務(wù)

事務(wù)是邏輯上的一組操作,要么都執(zhí)行,要么都不執(zhí)行

1、Spring管理事務(wù)的方式

  • 編程式事務(wù) : 在代碼中硬編碼(不推薦使用) : 通過 TransactionTemplate或者 TransactionManager 手動管理事務(wù),實際應(yīng)用中很少使用,但是對于理解 Spring 事務(wù)管理原理有幫助
  • 聲明式事務(wù) : 在 XML 配置文件中配置或者直接基于注解(推薦使用) : 實際是通過 AOP 實現(xiàn)(基于@Transactional 的全注解方式使用最多)

2、事務(wù)傳播行為:為了解決業(yè)務(wù)層方法之間互相調(diào)用的事務(wù)問題,@Transactional注解默認使用的值為TransactionDefinition.PROPAGATION_REQUIRED

3、事務(wù)的隔離級別:指的是一個事務(wù)對數(shù)據(jù)的修改與另一個并行的事務(wù)的隔離程度,當多個事務(wù)同時訪問相同數(shù)據(jù)時,如果沒有采取必要的隔離機制,就可能發(fā)生以下問題

  • 臟讀:一個事務(wù)讀到另一個事務(wù)未提交的更新數(shù)據(jù)。
  • 幻讀:例如第一個事務(wù)對一個表中的數(shù)據(jù)進行了修改,比如這種修改涉及到表中的“全部數(shù)據(jù)行”。同時,第二個事務(wù)也修改這個表中的數(shù)據(jù),這種修改是向表中插入“一行新數(shù)據(jù)”。那么,以后就會發(fā)生操作第一個事務(wù)的用戶發(fā)現(xiàn)表中還存在沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
  • 不可重復讀:比方說在同一個事務(wù)中先后執(zhí)行兩條一模一樣的select語句,期間在此次事務(wù)中沒有執(zhí)行過任何DDL語句,但先后得到的結(jié)果不一致,這就是不可重復讀

常用的是TransactionDefinition.ISOLATION_DEFAULT,使用后端數(shù)據(jù)庫默認的隔離級別,MySQL 默認采用的 REPEATABLE_READ 隔離級別 Oracle 默認采用的 READ_COMMITTED 隔離級別

4、@Transactional(rollbackFor = Exception.class)注解:如果類或者方法加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數(shù)據(jù)庫里面的數(shù)據(jù)也會回滾文章來源地址http://www.zghlxwxcb.cn/news/detail-417033.html

  • 在 @Transactional 注解中如果不配置rollbackFor屬性,那么事務(wù)只會在遇到RuntimeException的時候才會回滾
  • 加上 rollbackFor=Exception.class,可以讓事務(wù)在遇到非運行時異常時也回滾

十、實體之間的關(guān)聯(lián)關(guān)系注解

  • @OneToOne : 一對一
  • @ManyToMany :多對多
  • @OneToMany : 一對多
  • @ManyToOne :多對一

十一、攔截器和過濾器有什么區(qū)別

  • 實現(xiàn)原理不同:過濾器是基于函數(shù)回調(diào)實現(xiàn)的,而攔截器則是基于Java的反射機制(動態(tài)代理)實現(xiàn)的
  • 觸發(fā)時機不同:Filter只在Servlet前后起作用,而攔截器能夠深入到方法前后,異常拋出前后等,因此攔截器的使用具有更大的彈性
  • 使用范圍不同:Filter是Servlet規(guī)范規(guī)定的,只能用于Web程序中。而攔截器是一個Spring組件,不僅能在Web程序中使用,也可以用于Application、Swing等程序中。
  • 使用場景不同:攔截器主要用來實現(xiàn)項目中的業(yè)務(wù)來判斷的,比如:登錄判斷、權(quán)限判斷、日志記錄等業(yè)務(wù);而過濾器通常是用來實現(xiàn)通用功能過濾的,比如:敏感詞過濾、字符集編碼設(shè)置等。

到了這里,關(guān)于Java知識復習(八)Spring基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JAVA后端開發(fā)面試基礎(chǔ)知識(八)——Spring

    JAVA后端開發(fā)面試基礎(chǔ)知識(八)——Spring

    Spring是一個輕量級Java開發(fā)框架 我們一般說 Spring 框架指的都是 Spring Framework,它是很多模塊的集合,使用這些模塊可以很方便地協(xié)助我們進行開發(fā),比如說 Spring 支持 IoC(Inverse of Control:控制反轉(zhuǎn)) 和 AOP(Aspect-Oriented Programming:面向切面編程)、可以很方便地對數(shù)據(jù)庫進行訪問、

    2024年03月10日
    瀏覽(25)
  • Linux復習——基礎(chǔ)知識

    Linux復習——基礎(chǔ)知識

    作者簡介:一名云計算網(wǎng)絡(luò)運維人員、每天分享網(wǎng)絡(luò)與運維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個人主頁: 網(wǎng)絡(luò)豆的主頁????? 1. 有關(guān)早期linux系統(tǒng)中 sysvin的init的7個級別描述正確的是( ???)[選擇1項] A. init 1 關(guān)機狀態(tài) ??? B. init 2 字符界面多用戶模式

    2024年02月15日
    瀏覽(28)
  • 1. 線程基礎(chǔ)知識復習

    線程基礎(chǔ)知識復習 1把鎖:synchronized(后面細講) 2個并: 并發(fā)(concurrent): 是在同一實體上的多個事件,是在一臺機器上“同時”處理多個任務(wù),同一時刻,其實是只有一個事情再發(fā)生。 并行(parallel): 是在不同實體上的多個事件,是在多臺處理器上同時處理多個任務(wù)

    2024年02月08日
    瀏覽(28)
  • 復習并發(fā)編程的基礎(chǔ)知識(一)

    復習并發(fā)編程的基礎(chǔ)知識(一)

    目錄 進程和線程 并發(fā)和并行 ?如何創(chuàng)建一個線程? 1,繼承Thread類 ?2,實現(xiàn)Runnable接口 ? ? ? ? ?3. Callable接口 線程Thread類的一些重要方法 ?守護線程: 時間長了,并發(fā)編程的基礎(chǔ)知識總忘,來記錄一下: 進程和線程 進程:資源分配的最小單元,什么是資源?CPU,內(nèi)存,網(wǎng)

    2024年02月08日
    瀏覽(19)
  • Pytorch基礎(chǔ)知識點復習

    Pytorch基礎(chǔ)知識點復習

    本篇博客是本人對pytorch使用的查漏補缺,參考資料來自 深入淺出PyTorch,本文主要以提問的方式對知識點進行回顧,小伙伴們不記得的知識點可以查一下前面的教程哦。 ??現(xiàn)在并行計算的策略是 不同的數(shù)據(jù)分布到不同的設(shè)備中,執(zhí)行相同的任務(wù)(Data parallelism) 。 ??它的邏

    2024年01月20日
    瀏覽(28)
  • Python基礎(chǔ)知識大全(適用于全面復習Python語法知識)

    Python基礎(chǔ)知識大全(適用于全面復習Python語法知識)

    python屬于解釋型語言 源代碼(python)-解釋器(逐行解釋每一句源代碼)-操作系統(tǒng)-cpu java屬于編譯型語言 源代碼(java)-編譯器-可執(zhí)行文件-操作系統(tǒng)-cpu 容易混淆的幾種表現(xiàn)形式 元組( ) 和列表[ ] 類似 只是元組不可以修改 這兩個有點類似于C語言中的數(shù)組 集合 唯一{ } 和字典類似 只

    2024年02月02日
    瀏覽(46)
  • Mysql數(shù)據(jù)庫基礎(chǔ)知識總復習

    Mysql數(shù)據(jù)庫基礎(chǔ)知識總復習

    小亭子正在努力的學習編程,接下來將開啟javaEE的學習~~ 分享的文章都是學習的筆記和感悟,如有不妥之處希望大佬們批評指正~~ 同時如果本文對你有幫助的話,煩請點贊關(guān)注支持一波, 感激不盡~~ 目錄 前言 數(shù)據(jù)庫基礎(chǔ)知識 數(shù)據(jù),數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng) 數(shù)據(jù)

    2024年02月02日
    瀏覽(20)
  • 計算機網(wǎng)絡(luò)安全基礎(chǔ)知識復習

    計算機安全: 對于一個自動化的信息系統(tǒng),采取措施確保信息系統(tǒng)資源(包括硬件、軟件、固件、信息數(shù)據(jù)和通信)的完整性,可用性和保密性。 目標/服務(wù): 認證;訪問控制;數(shù)據(jù)保密性;數(shù)據(jù)完整性,不可否認性,可用性. 安全攻擊 :任何危及信息系統(tǒng)安全的行為。 安全機

    2024年02月09日
    瀏覽(23)
  • 嵌入式學習stm32基礎(chǔ)知識(期末復習)

    嵌入式學習stm32基礎(chǔ)知識(期末復習)

    1. 計算機的體系架構(gòu) 馮諾依曼架構(gòu) ? 在完整的計算機系統(tǒng)中,包含五個部分,儲存器,運算器,控制器輸入設(shè)備和輸出設(shè)備。 改進的馮諾依曼架構(gòu) 改進型架構(gòu)的各模塊的高速數(shù)據(jù)交換中心利用儲存器這個大容量,極大的提高了效率。 哈佛架構(gòu) ? 哈佛結(jié)構(gòu)數(shù)據(jù)空間和地址

    2024年02月07日
    瀏覽(73)
  • 【數(shù)據(jù)庫】MySQL概念性基礎(chǔ)知識期末復習

    第一章 3 二維表結(jié)構(gòu)……數(shù)據(jù)模型—— 關(guān)系數(shù)據(jù)模型 5 描述全部數(shù)據(jù)整體邏輯結(jié)構(gòu)—— 模式 6 邏輯數(shù)據(jù)獨立性—— 模式變,外模式和應(yīng)用程序不變 7 物理數(shù)據(jù)獨立性—— 內(nèi)模式變,外模式和應(yīng)用程序不變 9 R-(R-S)—— R∩S 10 從兩個關(guān)系笛卡爾積中選取他們屬性間滿足一定條

    2024年02月02日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包