最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 依賴注入、AOP代理全方面解析

 更新時間:2025年08月11日 11:16:21   作者:Arva .  
文章介紹了軟件開發(fā)中的開閉原則、依賴倒置原則及Spring非侵入式設(shè)計,通過IoC和DI實現(xiàn)解耦,提升系統(tǒng)擴展性、可測試性及架構(gòu)遷移能力,強調(diào)框架能力以無感知方式注入業(yè)務(wù)代碼的核心優(yōu)勢,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧

OCP

O代表Open ,C代表Closed
在軟件開發(fā)過程中應(yīng)當對擴展開放,對修改關(guān)閉。也就是說,如果在進行功能擴展的時候,添加額外的類是沒問題的,但因為功能擴展而修改之前運行正常的程序,這是忌諱的,不被允許的。因為一旦修改之前運行正常的程序,就會導致項目整體要進行全方位的重新測試。

DIP

依賴倒置原則(Dependence Inversion Principle),簡稱DIP,主要倡導面向抽象編程,面向接口編程,不要面向具體編程,
讓上層不再依賴下層,下面改動了,上面的代碼不會受到牽連。
怎么做到呢?當然是用接口。
這樣可以大大降低程序的耦合度,耦合度低了,擴展力就強了,同時代碼復用性也會增強。(軟件七大開發(fā)原則都是在為解耦合服務(wù))

控制反轉(zhuǎn)IoC(Invension of Control)
控制反轉(zhuǎn)是一種新型的設(shè)計模式
交出的權(quán)力
new對象的權(quán)力
對象之間的關(guān)系(到底用的是哪一個實現(xiàn)類)

Spring

是實現(xiàn)類IoC的容器。
IOC是思想,DI是實現(xiàn)。通過DI實現(xiàn)bean管理(有bean對象的創(chuàng)建和bean與bean之間關(guān)系的維護)。
DI(依賴注入)有set注入和構(gòu)造注入

依賴注入之set注入

這里最后一行的理解,先能找到是哪一個set方法,再找到形參對應(yīng)的實際參數(shù)到底在哪里。

外部 Bean

  • 在 Spring 配置文件中單獨定義
  • 可以被多個其他 Bean 引用
  • 有自己獨立的 ID/名稱
<!-- 外部 Bean 定義 -->
<bean id="address" class="com.example.Address">
    <property name="city" value="Beijing"/>
</bean>
<!-- 引用外部 Bean -->
<bean id="employee" class="com.example.Employee">
    <property name="address" ref="address"/>
</bean>

內(nèi)部 Bean

  • 直接在引用它的 Bean 內(nèi)部定義
  • 只能被當前 Bean 使用
  • 沒有獨立的 ID/名稱
<bean id="employee" class="com.example.Employee">
    <property name="address">
        <!-- 內(nèi)部 Bean 定義 -->
        <bean class="com.example.Address">
            <property name="city" value="Beijing"/>
        </bean>
    </property>
</bean>

作用范圍不同

特性外部 Bean內(nèi)部 Bean
作用域全局可用僅限當前 Bean 內(nèi)部使用
生命周期由容器管理隨外部 Bean 創(chuàng)建和銷毀
是否可重用是,可被多個 Bean 引用否,只能被當前 Bean 使用

構(gòu)造注入

set注入在創(chuàng)建對象之后,而構(gòu)造注入在創(chuàng)建對象的時候就注入了。
xml解析+工廠模式+反射機制
IoC思想的一種具體實現(xiàn)是依賴注入DI
八大框架

兩個核心模塊 IoC AOP
AOP
ORM(Object-Relational Mapping,對象關(guān)系映射) 是一種編程技術(shù),用于在 面向?qū)ο缶幊陶Z言(如 Java、Python)中的對象與 關(guān)系型數(shù)據(jù)庫(如 MySQL、PostgreSQL)的表之間建立映射關(guān)系,從而讓開發(fā)者能夠以操作對象的方式間接操作數(shù)據(jù)庫,無需直接編寫復雜的 SQL 語句。

Spring的非侵入體現(xiàn)在哪里

Spring框架的非侵入式(Non-Invasive)設(shè)計是其核心哲學之一,指的是它不會強制要求你的代碼必須依賴Spring特定的類或接口,而是允許你以原生方式編寫業(yè)務(wù)邏輯,僅在需要時通過配置或注解引入Spring的能力。以下是具體分析:

1. 什么是“非侵入式”?

傳統(tǒng)框架的侵入性
例如早期的EJB 2.x,要求業(yè)務(wù)類必須繼承特定父類或?qū)崿F(xiàn)指定接口(如SessionBean),代碼與框架深度耦合。

// EJB 2.x的侵入式寫法(必須實現(xiàn)框架接口)
public class UserService implements SessionBean {
    // 必須實現(xiàn)框架方法
    public void ejbActivate() {} 
    // 業(yè)務(wù)邏輯...
}

Spring的非侵入性
你的類可以是純POJO(Plain Old Java Object),無需繼承或?qū)崿F(xiàn)Spring的類/接口。

// Spring中的POJO(完全獨立于框架)
public class UserService {
    public void addUser(String name) { 
        // 純業(yè)務(wù)邏輯
    }
}

2. Spring如何實現(xiàn)非侵入式?

(1)依賴注入(DI)通過配置/注解實現(xiàn)

不需要實現(xiàn)特定接口,只需通過@Autowired或XML配置即可注入依賴:

@Service
public class OrderService {
    @Autowired  // 通過注解注入,不依賴Spring接口
    private PaymentService paymentService;
}
(2)AOP通過代理模式實現(xiàn)

切面編程通過動態(tài)代理(JDK/CGLIB)增強功能,業(yè)務(wù)類無需感知:

@Transactional  // 只需添加注解,不改變類繼承結(jié)構(gòu)
public void updateOrder(Order order) {
    // 業(yè)務(wù)代碼
}
(3)模板模式消除樣板代碼

JdbcTemplate封裝了JDBC的繁瑣操作,但你的DAO類無需繼承任何Spring類:

@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate; // 直接使用,無需實現(xiàn)Spring接口
}

3. 非侵入式的核心優(yōu)勢

特性侵入式框架Spring(非侵入式)
代碼耦合度高(依賴框架父類/接口)低(POJO + 配置/注解)
可測試性需依賴框架環(huán)境測試可直接單元測試(無框架依賴)
遷移成本重構(gòu)代價高輕松切換其他框架或去Spring化
靈活性受框架設(shè)計限制自由選擇技術(shù)組合

4. 對比其他框架

  • 侵入式框架示例

    • Struts 1.x(Action需繼承ActionForm
    • EJB 2.x(需實現(xiàn)SessionBean
  • Spring的非侵入式體現(xiàn)

    • 你的UserService可以同時用于Spring、非Spring環(huán)境,甚至移植到Quarkus/Micronaut。
    • 僅需修改配置(如從XML換為@Bean),無需改動業(yè)務(wù)代碼。

總結(jié)

Spring通過依賴注入、AOP代理、模板模式等設(shè)計,將框架能力以無感知方式注入到業(yè)務(wù)代碼中,使得開發(fā)者可以:
? 用原生Java對象編寫核心邏輯
? 按需選擇Spring功能(而非強制)
? 輕松遷移或與其他框架集成

這種設(shè)計正是Spring能成為Java生態(tài)基石的關(guān)鍵原因之一。

到此這篇關(guān)于Spring 依賴注入、AOP代理全方面解析的文章就介紹到這了,更多相關(guān)Spring 依賴注入AOP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面

    jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面

    這篇文章主要介紹了jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 基于Spring實現(xiàn)搜索目錄下指定名稱文件

    基于Spring實現(xiàn)搜索目錄下指定名稱文件

    這篇文章主要為大家詳細介紹了如何基于Spring實現(xiàn)搜索目錄下指定名稱文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-08-08
  • Spring Task定時任務(wù)的完整使用教學

    Spring Task定時任務(wù)的完整使用教學

    Spring Task是Spring框架提供的輕量級定時任務(wù)工具,它無需依賴額外的第三方庫,直接集成在Spring核心包中,在SpringBoot中,Spring Task提供了自動配置支持,只需少量注解即可快速實現(xiàn)定時任務(wù)功能,本文給大家介紹了Spring Task定時任務(wù)的完整使用教學
    2026-06-06
  • 淺談Spring自定義注解從入門到精通

    淺談Spring自定義注解從入門到精通

    這篇文章主要介紹了淺談Spring自定義注解從入門到精通,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    這篇文章主要介紹了SpringMVC中的ConversionServiceExposingInterceptor工具類解析,ConversionServiceExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,需要的朋友可以參考下
    2023-12-12
  • Java 利用遞歸實現(xiàn)鏈表的歸并排序

    Java 利用遞歸實現(xiàn)鏈表的歸并排序

    這篇文章主要介紹了Java 如何利用遞歸實現(xiàn)鏈表的歸并排序,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • Springboot第三方j(luò)ar打不進jar里的問題分析及解決

    Springboot第三方j(luò)ar打不進jar里的問題分析及解決

    文章介紹了如何解決在Maven項目中無法從maven倉庫找到的第三方j(luò)ar包問題,通過將這些jar包添加到本地庫,使用特定的命令設(shè)置groupId、artifactId、版本號、包類型和文件路徑,此方法適用于在Windows環(huán)境下的操作,并需要安裝Maven環(huán)境變量
    2025-10-10
  • 淺談java泛型的作用及其基本概念

    淺談java泛型的作用及其基本概念

    下面小編就為大家?guī)硪黄獪\談java泛型的作用及其基本概念。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • springBoot之如何獲取接口請求數(shù)據(jù)和返回數(shù)據(jù)實現(xiàn)日志

    springBoot之如何獲取接口請求數(shù)據(jù)和返回數(shù)據(jù)實現(xiàn)日志

    這篇文章主要介紹了springBoot之如何獲取接口請求數(shù)據(jù)和返回數(shù)據(jù)實現(xiàn)日志問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • springboot實現(xiàn)對注解的切面案例

    springboot實現(xiàn)對注解的切面案例

    這篇文章主要介紹了springboot實現(xiàn)對注解的切面過程,首先定義一個注解、再編寫對注解的切面只是記錄的執(zhí)行時間和打印方法,可以實現(xiàn)其他邏輯,需要的朋友可以參考一下
    2022-01-01

最新評論

江达县| 同江市| 浦江县| 福安市| 香格里拉县| 贞丰县| 延边| 彭泽县| 娄底市| 谷城县| 南京市| 武胜县| 泰和县| 翁牛特旗| 石楼县| 汉寿县| 高唐县| 三河市| 泸州市| 昌图县| 尚志市| 万宁市| 阿城市| 平山县| 金门县| 临泽县| 九江县| 和政县| 临清市| 肥乡县| 车致| 珲春市| 玉树县| 张掖市| 岐山县| 防城港市| 卓资县| 定远县| 武功县| 隆回县| 龙陵县|