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

【Java面試】Spring中的IOC和AOP

這篇具有很好參考價(jià)值的文章主要介紹了【Java面試】Spring中的IOC和AOP。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

IOC/DI

IOC:控制反轉(zhuǎn)也叫依賴注入。利用了工廠模式
將對(duì)象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來(lái)生成類的實(shí)例對(duì)象以及管理對(duì)象。在spring容器啟動(dòng)的時(shí)候,spring會(huì)把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時(shí)候,就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類(假設(shè)這個(gè)類名是A),分配的方法就是調(diào)用A的setter方法來(lái)注入,而不需要你在A里面new這些bean了。

在傳統(tǒng)的程序設(shè)計(jì)中,當(dāng)調(diào)用者需要被調(diào)用者的協(xié)助時(shí),通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例。但在spring里創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來(lái)完成,因此控制反轉(zhuǎn)(IoC);創(chuàng)建被調(diào)用者實(shí)例的工作通常由spring容器來(lái)完成,然后注入調(diào)用者,因此也被稱為依賴注入(DI),依賴注入和控制反轉(zhuǎn)是同一個(gè)概念。

總結(jié):
(1)IOC就是控制反轉(zhuǎn),是指創(chuàng)建對(duì)象的控制權(quán)的轉(zhuǎn)移,以前創(chuàng)建對(duì)象的主動(dòng)權(quán)和時(shí)機(jī)是由自己把控的,而現(xiàn)在這種權(quán)力轉(zhuǎn)移到Spring容器中,并由容器根據(jù)配置文件去創(chuàng)建實(shí)例和管理各個(gè)實(shí)例之間的依賴關(guān)系,對(duì)象與對(duì)象之間松散耦合,也利于功能的復(fù)用。DI依賴注入,和控制反轉(zhuǎn)是同一個(gè)概念的不同角度的描述,即 應(yīng)用程序在運(yùn)行時(shí)依賴IoC容器來(lái)動(dòng)態(tài)注入對(duì)象需要的外部資源。
(2)最直觀的表達(dá)就是,IOC讓對(duì)象的創(chuàng)建不用去new了,可以由spring自動(dòng)生產(chǎn),使用java的反射機(jī)制,根據(jù)配置文件在運(yùn)行時(shí)動(dòng)態(tài)的去創(chuàng)建對(duì)象以及管理對(duì)象,并調(diào)用對(duì)象的方法的。
(3)Spring的IOC有三種注入方式 :構(gòu)造器注入、setter方法注入、接口注入。

IoC讓相互協(xié)作的組件保持松散的耦合,而AOP編程允許你把遍布于應(yīng)用各層的功能分離出來(lái)形成可重用的功能組件。

AOP

AOP:面向切面編程。(Aspect-Oriented Programming)
AOP就是典型的代理模式的體現(xiàn)。
代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會(huì)存在關(guān)聯(lián)關(guān)系,一個(gè)代理類的對(duì)象與一個(gè)委托類的對(duì)象關(guān)聯(lián),代理類的對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),而是通過(guò)調(diào)用委托類的對(duì)象的相關(guān)方法,來(lái)提供特定的服務(wù)。
AOP可以說(shuō)是對(duì)OOP的補(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來(lái)建立一種對(duì)象層次結(jié)構(gòu),用以模擬公共行為的一個(gè)集合。當(dāng)我們需要為分散的對(duì)象引入公共行為的時(shí)候,OOP則顯得無(wú)能為力。
也就是說(shuō),OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對(duì)象層次中,而與它所散布到的對(duì)象的核心功能毫無(wú)關(guān)系。在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。
而AOP則將程序中的交叉業(yè)務(wù)邏輯(比如安全,日志,事務(wù)等),封裝成一個(gè)切面,然后注入到目標(biāo)對(duì)象(具體業(yè)務(wù)邏輯)中去。
實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:
一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;
二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼.
簡(jiǎn)單點(diǎn)解釋,比方說(shuō)你想在你的biz層所有類中都加上一個(gè)打印‘你好’的功能,這時(shí)就可以用aop思想來(lái)做.
你先寫個(gè)類寫個(gè)類方法,方法經(jīng)實(shí)現(xiàn)打印‘你好’,然后Ioc這個(gè)類 ref=“biz.*”讓每個(gè)類都注入即可實(shí)現(xiàn)。

完整理解:
OOP面向?qū)ο?,允許開發(fā)者定義縱向的關(guān)系,但并適用于定義橫向的關(guān)系,導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。
AOP,一般稱為面向切面,作為面向?qū)ο蟮囊环N補(bǔ)充,用于將那些與業(yè)務(wù)無(wú)關(guān),但卻對(duì)多個(gè)對(duì)象產(chǎn)生影響的公共行為和邏輯,抽取并封裝為一個(gè)可重用的模塊,這個(gè)模塊被命名為“切面”(Aspect),減少系統(tǒng)中的重復(fù)代碼,降低了模塊間的耦合度,同時(shí)提高了系統(tǒng)的可維護(hù)性。可用于權(quán)限認(rèn)證、日志、事務(wù)處理。
AOP實(shí)現(xiàn)的關(guān)鍵在于 代理模式,AOP代理主要分為靜態(tài)代理和動(dòng)態(tài)代理。靜態(tài)代理的代表為AspectJ;動(dòng)態(tài)代理則以Spring AOP為代表。
(1)AspectJ是靜態(tài)代理的增強(qiáng),所謂靜態(tài)代理,就是AOP框架會(huì)在編譯階段生成AOP代理類,因此也稱為編譯時(shí)增強(qiáng),他會(huì)在編譯階段將AspectJ(切面)織入到Java字節(jié)碼中,運(yùn)行的時(shí)候就是增強(qiáng)之后的AOP對(duì)象。
(2)Spring AOP使用的動(dòng)態(tài)代理,所謂的動(dòng)態(tài)代理就是說(shuō)AOP框架不會(huì)去修改字節(jié)碼,而是每次運(yùn)行時(shí)在內(nèi)存中臨時(shí)為方法生成一個(gè)AOP對(duì)象,這個(gè)AOP對(duì)象包含了目標(biāo)對(duì)象的全部方法,并且在特定的切點(diǎn)做了增強(qiáng)處理,并回調(diào)原對(duì)象的方法。

Spring AOP中的動(dòng)態(tài)代理主要有兩種方式,JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理:

①JDK動(dòng)態(tài)代理只提供接口的代理,不支持類的代理。核心InvocationHandler接口和Proxy類,
InvocationHandler 通過(guò)invoke()方法反射來(lái)調(diào)用目標(biāo)類中的代碼,動(dòng)態(tài)地將橫切邏輯和業(yè)務(wù)編織在一起;接著,Proxy利用 InvocationHandler動(dòng)態(tài)創(chuàng)建一個(gè)符合某一接口的的實(shí)例, 生成目標(biāo)類的代理對(duì)象。
②如果代理類沒(méi)有實(shí)現(xiàn) InvocationHandler 接口,那么Spring AOP會(huì)選擇使用CGLIB來(lái)動(dòng)態(tài)代理目標(biāo)類。CGLIB(Code Generation Library),是一個(gè)代碼生成的類庫(kù),可以在運(yùn)行時(shí)動(dòng)態(tài)的生成指定類的一個(gè)子類對(duì)象,并覆蓋其中特定方法并添加增強(qiáng)代碼,從而實(shí)現(xiàn)AOP。CGLIB是通過(guò)繼承的方式做的動(dòng)態(tài)代理,因此如果某個(gè)類被標(biāo)記為final,那么它是無(wú)法使用CGLIB做動(dòng)態(tài)代理的。
(3)靜態(tài)代理與動(dòng)態(tài)代理區(qū)別在于生成AOP代理對(duì)象的時(shí)機(jī)不同,相對(duì)來(lái)說(shuō)AspectJ的靜態(tài)代理方式具有更好的性能,但是AspectJ需要特定的編譯器進(jìn)行處理,而Spring AOP則無(wú)需特定的編譯器處理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-497674.html

到了這里,關(guān)于【Java面試】Spring中的IOC和AOP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring5學(xué)習(xí)隨筆-IOC(反轉(zhuǎn)控制)、DI(依賴注入)和創(chuàng)建復(fù)雜對(duì)象

    Spring5學(xué)習(xí)隨筆-IOC(反轉(zhuǎn)控制)、DI(依賴注入)和創(chuàng)建復(fù)雜對(duì)象

    學(xué)習(xí)視頻:【孫哥說(shuō)Spring5:從設(shè)計(jì)模式到基本應(yīng)用到應(yīng)用級(jí)底層分析,一次深入淺出的Spring全探索。學(xué)不會(huì)Spring?只因你未遇見(jiàn)孫哥】 控制:對(duì)于成員變量賦值的控制權(quán) 反轉(zhuǎn)控制:把對(duì)于成員變量賦值的控制權(quán),從代碼中反轉(zhuǎn)(轉(zhuǎn)移)到Spring工廠和配置文件中。 好處:解耦合

    2024年02月05日
    瀏覽(55)
  • Spring入門&控制反轉(zhuǎn)(或依賴注入)&AOP的關(guān)鍵概念& 多配置文件&與web集成

    目錄 1. 什么是spring,它能夠做什么? 2. 什么是控制反轉(zhuǎn)(或依賴注入) 3. AOP的關(guān)鍵概念 4. 示例 4.1 創(chuàng)建工程 4.2 pom文件 4.3 spring配置文件 4.4 示例代碼 4.4.1 示例1 4.4.2 示例2 (abstract,parent示例) 4.4.3 使用有參數(shù)構(gòu)造方法創(chuàng)建javaBean 4.4.4 init-method:指定bean的初始化方法 4.4.5 復(fù)雜屬

    2024年02月09日
    瀏覽(24)
  • Spring6-IoC(Inversion of Control)控制反轉(zhuǎn)和DI(Dependency Injection)依賴注入,手動(dòng)實(shí)現(xiàn)IOC

    Java 反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為 Java 語(yǔ)言的 反射機(jī)制 。簡(jiǎn)單來(lái)說(shuō), 反射機(jī)制指的是程序在運(yùn)行時(shí)能夠獲取自身

    2024年02月09日
    瀏覽(43)
  • 12.控制反轉(zhuǎn)IOC與面向切面編程AOP

    目錄 一、IOC-控制反轉(zhuǎn)。 二、AOP-面向切面編程。 IOC(Inversion of Control)是控制反轉(zhuǎn)的縮寫,指的是將對(duì)象的創(chuàng)建過(guò)程和依賴關(guān)系的處理交給外部容器來(lái)實(shí)現(xiàn),從而實(shí)現(xiàn)對(duì)象之間的解耦。因此,IOC不是容器,是一種編程思想,將對(duì)象之間的依賴關(guān)系的處理從程序中轉(zhuǎn)移到容器(

    2023年04月09日
    瀏覽(23)
  • 從依賴倒置原則到IOC控制反轉(zhuǎn)實(shí)現(xiàn)

    從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(zhuǎn)(Inversion of Control, IoC)再到依賴注入(Dependency Injection, DI)的演進(jìn)過(guò)程,我們可以理解為一種逐步抽象和解耦的設(shè)計(jì)思想。這種思想在C#等面向?qū)ο蟮木幊陶Z(yǔ)言中得到了廣泛的應(yīng)用。 首先,讓我們回顧一下依賴倒置原

    2024年04月24日
    瀏覽(26)
  • CommunityToolkit.Mvvm8.1 IOC依賴注入控制反轉(zhuǎn)(5)

    ? 本系列文章導(dǎo)航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知識(shí)對(duì)您有所提示,同時(shí)歡迎交流和指正 作者:aierong 出處:https://www.cnblogs.com/aierong ? ? CommunityToolkit.Mvvm包不提供ioc功能,但是官方建議使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    瀏覽(26)
  • Spring IoC (控制反轉(zhuǎn))

    IoC 是 Inversion of Control 的簡(jiǎn)寫,譯為“控制反轉(zhuǎn)”,它不是一門技術(shù),而是一種設(shè)計(jì)思想,是一個(gè)重要的面向?qū)ο缶幊谭▌t。 Spring 通過(guò) IoC 容器來(lái)管理所有 Java 對(duì)象的實(shí)例化和初始化,控制對(duì)象與對(duì)象之間的依賴關(guān)系。我們將由 IoC 容器管理的 Java 對(duì)象稱為 Spring Bean,它與使

    2024年02月13日
    瀏覽(23)
  • Go中的控制反轉(zhuǎn) IoC

    控制反轉(zhuǎn) 是一種解耦思想,將原本耦合在 業(yè)務(wù)邏輯 中的 控制邏輯 單獨(dú)拆出來(lái)實(shí)現(xiàn),不再讓 業(yè)務(wù)邏輯 在處理業(yè)務(wù)的同時(shí)還要去實(shí)現(xiàn) 控制邏輯 ,而是專注處理業(yè)務(wù)。在 業(yè)務(wù)邏輯 代碼中耦合進(jìn) 控制邏輯 ,會(huì)導(dǎo)致在編寫業(yè)務(wù)邏輯時(shí)需要處理業(yè)務(wù)之外的事,而且 控制邏輯 耦合

    2024年03月12日
    瀏覽(18)
  • Spring系列篇--關(guān)于IOC【控制反轉(zhuǎn)】的詳解

    Spring系列篇--關(guān)于IOC【控制反轉(zhuǎn)】的詳解

    接下來(lái)看看由輝輝所寫的關(guān)于Spring的相關(guān)操作吧 目錄 ????Welcome Huihui\\\'s Code World ! !???? ?一.什么是Spring 二.Spring的特點(diǎn) 三.什么是IOC 場(chǎng)景模擬: 控制反轉(zhuǎn): 使用步驟 1 創(chuàng)建Maven的war項(xiàng)目然后配置web的相關(guān)依賴以及項(xiàng)目結(jié)構(gòu)的配置 2在pom.xml文件中配置Spring的依賴 3 在resourc

    2024年02月12日
    瀏覽(19)
  • 使用 Spring 實(shí)現(xiàn)控制反轉(zhuǎn)和依賴注入

    在本文中,我們將介紹 IoC (控制反轉(zhuǎn))和 DI (依賴注入)的概念,以及如何在 Spring 框架中實(shí)現(xiàn)它們。 控制反轉(zhuǎn)是軟件工程中的一個(gè)原則,它將對(duì)象或程序的某些部分的控制權(quán)轉(zhuǎn)移給容器或框架。我們最常在面向?qū)ο缶幊痰纳舷挛闹惺褂盟?與傳統(tǒng)編程相比,傳統(tǒng)編程中我

    2024年02月13日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包