(三)Spring教程——依賴注入與控制反轉

? ? ? ? Spring框架是為了簡化企業級應用開發而創建的,其強大之處在于對Java SE和Java EE開發進行全方位的簡化,Spring還對常用的功能進行封裝,可以極大地提高Java EE的開發效率。

? ? ? ? 依賴注入是Spring的核心技術之一,也被稱為“控制反轉”,借助依賴注入技術,我們可以很方便地實現調用者和被調用者的分解,解耦類與類之間的關系。

? ? ? ? 依賴注入(DI)指組件之間依賴關系由容器在運行期決定,即由容器動態地將某個依賴關系注入到組件之中。依賴注入的目的并非為軟件系統帶來更多功能,而是為了提高組件重用的頻率,并為系統搭建一個靈活、可擴展的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無須修改任何代碼,也無需在意資源來自何處、由誰實現,就可以指定目標需要的資源,完成自身的業務邏輯。

? ? ? ? 控制反轉(IoC)并不是什么具體的技術,而是一種設計思想。在Java開發中通過IoC,將原本由程序代碼直接操控的組件對象交由容器來操控,通過容器來實現組件對象的裝配和管理。所謂“控制反轉”概念就是對組件對象控制權的轉移,從程序代碼本身轉移到了外部容器。

? ? ? ? 依賴注入和控制反轉是同一個概念的不同角色描述,由于控制反轉概念比較含糊(可能只是理解到容器控制對象這一個層面,很難讓人想到由誰來維護對象關系),所以2004年Martin Fowler又給出了一個新的名字——依賴注入。相對控制反轉而言,依賴注入明確描述了“被注入對象依賴控制反轉容器來配置依賴對象”。依賴注入的具體含義是:當某個角色(調用者,可能是一個Java實例)需要另一個角色(被調用者,另一個Java實例)的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring中,被調用者的創建工作不再由調用者來完成,因此這也被稱作控制反轉;被調用者實例的創建工作通常由Spring容器來完成,因此這也被稱作依賴注入。

? ? ? ? 在編寫傳統的Java應用代碼時,我們一般是直接在對象內部通過new來創建對象,讓程序主動去創建依賴對象,這就是一個“誰使用,誰創建”的過程,創建依賴對象的主動權和創建時機都是由自己來把控。

? ? ? ? 下面用示例來說明傳統的Java應用代碼是怎么來創建對應并使用對象中的屬性和方法。

? ? ? ? 首先創建一個Demo1.java類,該類的代碼如下所示

package com.example.servlet001;public class Demo1 {public static void main(String[] args) {Person person=new Person();person.sayHello();}}class Person{public void sayHello(){System.out.println("hello");}}

? ? ? ? 運行該類后的輸出如下圖所示

? ? ? ? 可以看到Demo1類和Person類之間存在著強耦合,Person類和方法修改時,Demo1類的代碼也需要修改。

? ? ? ? 而在Spring中,可以通過IoC容器動態地將某個依賴關系注入到組件之中。

? ? ? Spring有兩個重要的接口:BeanFactory和ApplicationContext,所謂的容器就是實現了BeanFactory接口或者是ApplicationContext接口的類的實例,BeanFactory是最頂層、最基本的接口,它描述了容器需要實現的最基本的功能,比如對象的注冊、獲取等。

? ? ? ? ApplicationContext接口繼承了BeanFactory接口,擁有BeanFactory接口的全部功能,還繼承了ApplicationEventPublisher接口、ResourceLoader接口、MessageSource接口,提供應用事件發布、資源加載和國際化功能。在實際應用中,這些功能使得ApplicationContext接口比BeanFactory接口更加方便。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12242.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux】自動化編譯工具——make/makefile(超細圖例詳解!!)

目錄 一、前言 二、make / Makefile背景介紹 🥝Makefile是干什么的? 🍇make又是什么? 三、demo實現【見見豬跑🐖】 四、依賴關系與依賴方法 1、概念理清 2、感性理解【父與子👨】 3、深層理解【程序…

【JavaEE】HTTP 協議

文章目錄 一、HTTP 協議1、HTTP 是什么2、理解 "應用層協議"3、理解 HTTP 協議的工作過程4、HTTP 協議格式5、HTTP 請求 (Request)5.1 認識 URL 6、 二、HTTPS1、HTTPS是什么2、"加密" 是什么3、HTTPS 的工作過程3.1 對稱加密3.2 非對稱加密3.3 證書3.4 完…

零樣本身份保持:ID-Animator引領個性化視頻生成技術新前沿

在最新的研究進展中,由Xuanhua He及其團隊提出的ID-Animator技術,為個性化視頻生成領域帶來了突破性的創新。這項技術的核心在于其零樣本(zero-shot)人物視頻生成方法,它允許研究者和開發者根據單一的參考面部圖像生成…

深度解刨性能測試工具Locust

🍅 視頻學習:文末有免費的配套視頻可觀看 🍅 關注公眾號【互聯網雜貨鋪】,回復 1 ,免費獲取軟件測試全套資料,資料在手,漲薪更快 Locust安裝 …

Python3 筆記:range() 函數

range() 函數返回數字序列,默認從 0 開始,默認以 1 遞增,并以指定的數字結束。 它的語法格式:range(start,end,step) start是起始值,end是終止值,step是間隔值 上述語句可以產生一個[start,…, end-1]列…

gin框架學習筆記(三) ——路由請求與相關參數

參數種類與參數處理 查詢參數 在講解查詢參數的定義之前,我們先來看一個例子,當我打開了CSDN,我現在想查看我的博客瀏覽量,那么我就需要點擊我的頭像來打開我的個人主頁,像下面這樣: 我們現在把瀏覽器的網址取下來,…

【35分鐘掌握金融風控策略27】貸中風控策略與客戶運營體系

目錄 貸中風控策略與客戶運營體系 貸中風控日標 貸中風控數據源 貸中風控策略與客戶運營體系 貸中是風控的第二道防線,貸中階段風控的重點工作就是存量客戶風控及運營。在當下,新客市場趨于飽和且獲客成本越來越高,所以,在做好…

基于Java的俄羅斯方塊游戲的設計與實現

關于俄羅斯方塊項目源碼.zip資源-CSDN文庫https://download.csdn.net/download/JW_559/89300281 基于Java的俄羅斯方塊游戲的設計與實現 摘 要 俄羅斯方塊是一款風靡全球,從一開始到現在都一直經久不衰的電腦、手機、掌上游戲機產品,是一款游戲規則簡單…

物聯網設計競賽_1_邊緣人工智能云計算

邊緣人工智能: 本質上邊緣人工智能,直接會在邊緣設備上運行機器學習算法,例如物聯網設備或邊緣服務器上,這樣可以減少數據傳輸延遲,提高響應速度。 云計算: 云計算模型中,數據通常被發送到遠…

在React中利用Postman測試代碼獲取數據

文章目錄 概要名詞解釋1、Postman2、axios 使用Postman測試API在React中獲取并展示數據小結 概要 在Web開發中,通過API獲取數據是一項常見任務。Postman是一個功能強大的工具,可以幫助開發者測試API,并查看API的響應數據。在本篇博客中&…

【C語言】—— 動態內存管理

【C語言】——動態內存管理 一、動態內存管理概述1.1、動態內存的概念1.2、動態內存的必要性 二、 m a l l o c malloc malloc 函數2.1、函數介紹2.2、應用舉例 三、 c a l l o c calloc calloc 函數四、 f r e e free free 函數4.1、函數介紹4.2、應用舉例 五、 r e a l l o …

無列名注入

在進行sql注入時,一般都是使用 information_schema 庫來獲取表名與列名,因此有一種場景是傳入參數時會將 information_schema 過濾 在這種情況下,由于 information_schema 無法使用,我們無法獲取表名與列名。 表名獲取方式 Inn…

Redis——Redis集群腦裂問題

Redis集群的腦裂問題(Split-Brain)是一個在分布式系統中可能發生的嚴重問題,特別是在基于主從復制和哨兵(Sentinel)機制的Redis集群環境中。以下是對Redis集群腦裂問題的詳細闡述: 定義 Redis集群腦裂問題…

FullCalendar日歷組件集成實戰(3)

背景 有一些應用系統或應用功能,如日程管理、任務管理需要使用到日歷組件。雖然Element Plus也提供了日歷組件,但功能比較簡單,用來做數據展現勉強可用。但如果需要進行復雜的數據展示,以及互動操作如通過點擊添加事件&#xff0…

SwiftUI中的常用圖形(Shapes)

概述 在SwiftUI中,常用的圖形(Shape)主要有: Circle:圓形 Ellipse:橢圓形 Capsule:膠囊形 Rectangle:矩形 RoundedRectangle:圓角矩形 上面的這些圖形都繼承了Shape協議…

DFA算法 敏感詞過濾方案匯總以及高效工具sensitive-word

敏感詞過濾方案匯總以及高效工具sensitive-word 導入pom文件 <dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version>0.12.0</version> </dependency>接下來我們編寫相關測試類…

解四層負載和七層負載:Nginx 的應用示范

在網絡架構中&#xff0c;負載均衡是分配網絡或應用程序流量到多個服務器的技術&#xff0c;以優化資源使用、最大化吞吐量、最小化響應時間和避免任何單一資源的過載。Nginx&#xff0c;作為一款強大的HTTP和反向代理服務器&#xff0c;能夠處理七層&#xff08;應用層&#x…

深入剖析JVM、JDK和JRE的區別與聯系

在Java開發和運行過程中&#xff0c;JVM、JRE和JDK是三個核心組件。理解它們的區別和聯系是每個Java開發者的基礎技能。本文將深入探討這三個組件的作用、組成及其在實際應用中的重要性。 一、Java虛擬機&#xff08;JVM&#xff09; **JVM&#xff08;Java Virtual Machine&…

Hive讀寫文件機制

Hive讀寫文件機制 1.SerDe是什么&#xff1f; SerDe是Hive中的一個概念&#xff0c;代表著“序列化/反序列化” &#xff08;Serializer/Deserializer&#xff09;。 SerDe在Hive中是用來處理數據如何在Hive與底層存儲系統&#xff08;例如HDFS&#xff09;之間進行轉換的機制…

ceph糾刪碼精簡配置ec4+2:1與ec4+2的切換

概述 近期遇到項目&#xff0c;由于靈活配置&#xff0c;前期只有部分機器&#xff0c;后續擴容&#xff0c;想用ec42的糾刪碼&#xff0c;但前期只有3臺機器&#xff0c;需要做精簡ec。 erasure-code-profile 首先按照ceph創建糾刪碼池步驟進行操作。 創建ec42的rule cep…