Spring框架(二)——IoC

1、什么是IoC

  • IoC—Inverse of Control,控制反轉,將對象的創建權力反轉給Spring框架
  • 控制反轉是為了降低程序耦合度,提高程序擴展力,達到OCP原則,達到DIP原則
    • OCP開閉原則:在軟件開發過程中應當對擴展開放,對修改關閉
    • DIP依賴倒置原則:主要倡導面向抽象編程,面向接口編程,不要面向具體編程

  • 所謂的反轉,是指?
    • 將對象的創建權利交出去,交給第三方容器負責
    • 將對象和對象之間關系的維護權交出去,交給第三方容器負責
  • 如何實現IoC
    • DI(Dependency Injection):依賴注入

2、DI——依賴注入

  • Spring是通過依賴注入的方式來完成Bean管理的(Bean管理說的是:Bean對象的創建,以及Bean對象中屬性的賦值或者叫做Bean對象之間關系的維護)

  • 什么是DI

    • 依賴指的是對象和對象之間的關聯關系

    • 注入指的是一種數據傳遞行為,通過注入行為來讓對象和對象產生關系

  • DI的常見方式
    • set方法注入
    • 構造方法注入
  • set方法注入:
    • set注入,顯然,是基于set方法來完成的,底層會通過反射機制調用屬性對應的set方法然后給屬性賦值。這種方式要求屬性必須對外提供set方法。
    • 請看下例:
      • //持久層
        public class OrderDaoImpl implements OrderDao {@Overridepublic void saveOrder() {System.out.println("持久層:保存訂單...");}
        }
        //業務邏輯層
        public class OrderServiceImpl implements OrderService {// 編寫成員屬性,一定需要提供該屬性的set方法private OrderDao orderDao;// 一定需要提供該屬性的set方法,IOC容器底層就通過屬性的set方法方式注入值public void setOrderDao(OrderDao orderDao) {this.orderDao = orderDao;}// 消息private String msg;// 年齡private int age;public void setMsg(String msg) {this.msg = msg;}public void setAge(int age) {this.age = age;}@Overridepublic void saveOrder() {System.out.println("業務層:保存訂單..."+msg+" - "+age);// 調用orderDao.saveOrder();}
        }
        <!--spring的配置文件-->
        <!--DI:依賴注入-->
        <bean id="os" class="cn.tx.service.OrderServiceImpl"><property name="orderDao" ref="od" /><property name="msg" value="你好" /><property name="age" value="30" />
        </bean>
        <bean id="od" class="cn.tx.dao.OrderDaoImpl"></bean>

      • 實現原理:
        • 通過property標簽獲取到屬性名:orderDao、msg、age?
          • property標簽的name是屬性名。
          • ref是要注入的bean對象的id,是引用
        • 通過屬性名推斷出set方法名:setOrderDao、setMsg、setAge(這里讀者可以去測試一下,當我們把set方法注釋掉后會報錯,指出沒有setter方法)
        • 通過反射機制調用setOrderDao()、setMsg()、setAge()方法給屬性賦值
  • 構造方法注入
    • 通過調用構造方法來給屬性賦值。

    • 如下例:

      • public class Car {// 名稱private String cname;// 金額private Double money;public Car(String cname, Double money) {this.cname = cname;this.money = money;}@Overridepublic String toString() {return "Car{" +"cname='" + cname + '\'' +", money=" + money +'}';}
        }//核心配置文件
        <bean id="car" class="cn.tx.demo2.Car"><constructor-arg name="cname" value="大奔" /><constructor-arg name="money" value="400000" /></bean>

3、數組,集合(List,Set,Map),Properties等的注入

這里直接上代碼,首先我們先創建一個CollectionBean的對象,用來完成該案例

public class CollectionBean {// 數組private String [] strs;public void setStrs(String[] strs) {this.strs = strs;}private List<String> list;public void setList(List<String> list) {this.list = list;}private Map<String,String> map;public void setMap(Map<String, String> map) {this.map = map;}private Properties properties;public void setProperties(Properties properties) {this.properties = properties;}@Overridepublic String toString() {return "CollectionBean{" +"strs=" + Arrays.toString(strs) +", list=" + list +", map=" + map +", properties=" + properties +'}';}
}

?spring的配置文件

<!--給集合屬性注入值--><bean id="collectionBean" class="cn.tx.demo3.CollectionBean"><property name="strs"><array><value>美美</value><value>小鳳</value></array></property><property name="list"><list><value>熊大</value><value>熊二</value></list></property><property name="map"><map><entry key="aaa" value="老王"/><entry key="bbb" value="小王"/></map></property><property name="properties"><props><prop key="username">root</prop><prop key="password">123456</prop></props></property></bean>

4、關于Spring的配置文件

  • Spring引入外部屬性配置文件

    • 我們這里以jdbc的信息為例,在類路徑下新建jdbc.properties文件

      • driver=com.mysql.cj.jdbc.Driver
        url=jdbc:mysql://localhost:3306/spring
        username=root
        password=root123

    • ?在spring配置文件中引入context命名空間。
      • <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"></beans>

    • 在spring中配置使用jdbc.properties文件。

      • <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:property-placeholder location="jdbc.properties"/><bean id="dataSource" class="com.powernode.spring6.beans.MyDataSource"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></bean>
        </beans>

  • 配置多個spring的配置文件
    • 主配置文件中包含其他的配置文件:
      <import resource="applicationContext2.xml"/>工廠創建的時候直接加載多個配置文件:
      ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
      "applicationContext.xml","applicationContext2.xml");

?

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

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

相關文章

跨阻放大器

#創作靈感# 最近涉及到微電流的監測項目&#xff0c;而里面的核心就是跨阻放大器&#xff0c;所以這里做一個簡單的介紹&#xff0c;后續等項目完成了&#xff0c;再做一個實例的介紹。 #正文# 跨阻放大器&#xff08;Transimpedance Amplifier, TIA&#xff09;是一種將輸入電…

Milvus Cloud集成 DSPy:搭建高效 RAG Pipeline

引言 大語言模型(LLM)為行業帶來變革,具備強大的生成能力,在與知識庫和檢索器等工具相結合時,能夠高效推動聊天機器人和 Agent 等高級生成式 AI(GenAI)應用的發展。與 LLMs 互動的過程中,最核心的部分是提示(prompt)。Prompt 是指用于指導這些模型執行特定任務的命令…

NCBI Virus 幫助文檔

What is NCBI Virus?&#xff08;什么是NCBI病毒&#xff09; 主要功能&#xff1a; Compare your sequence to those in the NCBI Virus database using NCBI BLAST algorithm. 使用NCBI BLAST算法將您的序列與NCBI病毒數據庫中的序列進行比較。Search, view and download …

Oracle PL/SQL 教程 第一部分

PL / SQL代表“過程語言擴展到結構化查詢語言”。 SQL用于查詢和更新關系數據庫。 PL / SQL與SQL緊密集成。 PL / SQL是SQL的Oracle過程擴展&#xff0c;是一種便攜式&#xff0c;高性能的事務處理語言。 使用PL / SQL&#xff0c;可以使用所有SQL數據操作&#xff0c;游標…

威聯通 NAS 磁盤擴容 更換大容量磁盤具體操作以以TS-532X為例

第一步 檢查磁盤狀態 打開存儲與快照總管&#xff0c;選左側磁盤查看磁盤狀態&#xff0c;應該是就緒狀態。 三塊磁盤都是就緒狀態。 上面截圖是更換過程中的截圖 具體操作 然后點擊存儲/快照 &#xff0c;選管理 選逐一更換磁盤&#xff0c;這里raid組需要注意&#xff0…

【LeetCode】 740. 刪除并獲得點數

這真是一道好題&#xff01;這道題不僅考察了抽象思維&#xff0c;還考察了分析能力、化繁為簡的能力&#xff0c;同時還有對基本功的考察。想順利地做出這道題還挺不容易&#xff01;我倒在了第一步與第二步&#xff1a;抽象思維和化繁為簡。題目的要求稍微復雜一些&#xff0…

Spring Session與分布式會話管理詳解

隨著微服務架構的普及&#xff0c;分布式系統中的會話管理變得尤為重要。傳統的單點會話管理已經不能滿足現代應用的需求。本文將深入探討Spring Session及其在分布式會話管理中的應用。 什么是Spring Session&#xff1f; Spring Session是一個用于管理HttpSession的Spring框…

數據恢復篇:如何在電腦上恢復已刪除和丟失的音樂文件

盡管流媒體網絡非常流行&#xff0c;但許多人仍然選擇將音樂下載并保存在 PC 本地。這會使文件面臨丟失或意外刪除的風險。 幸運的是&#xff0c;您可以使用數據恢復軟件恢復已刪除的音樂和其他文件類型。這篇文章討論了這些解決方案以及如何使用奇客數據恢復檢索丟失的音樂文…

02.Linux下安裝FFmpeg

目錄 一、下載FFmpeg的編譯源碼 二、編譯源碼 三、ffmpeg工具結構解析 1、bin目錄 2、include庫 3、lib庫 四、注意事項 五、可能出現的一些問題 1、某些工具未安裝/版本過久 2、缺少pkg-config工具 3、缺少ffmplay FFmpeg 是一個開源的跨平臺音視頻處理工具集&…

揭秘銀行理財產品:高收益背后的秘密

一、按幣種分類 人民幣理財產品&#xff1a;主要投資于人民幣計價的金融工具&#xff0c;如國債、金融債、央行票據等。此類產品風險較低&#xff0c;收益穩定。外幣理財產品&#xff1a;按照投資的本金風險分類&#xff0c;可分為本金100%保障、部分本金保障及不保本的外匯理…

華為OD機考題HJ24 合唱隊

前言 應廣大同學要求&#xff0c;開始以OD機考題作為練習題&#xff0c;看看算法和數據結構掌握情況。有需要練習的可以關注下。 描述 N 位同學站成一排&#xff0c;音樂老師要請最少的同學出列&#xff0c;使得剩下的 K 位同學排成合唱隊形。 設&#x1d43e;K位同學從左到…

科普文:八大排序算法(JAVA實現)+ 自制動畫 (袁廚的算法小屋)

我將我倉庫里的排序算法給大家匯總整理了一下&#xff0c;寫的非常非常細&#xff0c;還對每個算法制作了動畫&#xff0c;一定能夠對大家有所幫助&#xff0c;歡迎大家閱讀。另外我也對 leetcode 上面可以用排序算法秒殺的算法題進行了總結&#xff0c;會在后面的文章中進行發…

物聯網協議都包含哪些協議?

物聯網協議是物聯網生態系統中不可或缺的組成部分&#xff0c;它們負責處理和協調物聯網設備之間的通信。具體介紹如下&#xff1a; Ethernet&#xff1a;以太網是一種有線網絡協議&#xff0c;廣泛應用于局域網絡(LAN)中&#xff0c;提供穩定的高速數據傳輸。Wi-Fi&#xff1…

Python自動化運維 系統基礎信息模塊

1.系統信息的收集 系統信息的收集&#xff0c;對于服務質量的把控&#xff0c;服務的監控等來說是非常重要的組成部分&#xff0c;甚至是核心的基礎支撐部分。我們可以通過大量的核心指標數據&#xff0c;結合對應的檢測體系&#xff0c;快速的發現異常現象的苗頭&#xff0c;進…

springboot項目如何整合rocketmq

1、項目導入rocketmq依賴 添加 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency> 完整內容如下: <?xml version="1.0" encoding="…

Golang | Leetcode Golang題解之第208題實現Trie前綴樹

題目&#xff1a; 題解&#xff1a; type Trie struct {children [26]*TrieisEnd bool }func Constructor() Trie {return Trie{} }func (t *Trie) Insert(word string) {node : tfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &Trie{…

mac|tableau public 儀表盤使用

對華東地區的利潤進行儀表盤可視化 選擇下面的功能表的新建儀表盤,把上面的表1表2放入其中 通過下圖操作將兩個表聯合起來&#xff0c;即上圖使用篩選器時下面的表隨之改變 將上圖設置為篩選器&#xff0c;可以通過點擊地區查看數據

MySQL之MHA高可用集群及故障切換

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套優秀的mysql高可用環境下故障切換和主從復制的軟件。MHA的出現就是為了解決mysql單點故障。Mysql故障切換過程中&#xff0c;MHA能做到0-30秒內自動完成故障性切換操作。MHA能在故障切換的過程中最大程度…

特征工程的力量

為什么你應該使用邏輯回歸來建模非線性決策邊界&#xff08;使用 Python 代碼&#xff09; 作為一名大數據從業者&#xff0c;復雜的機器學習技術非常具有吸引力。使用一些深度神經網絡 (DNN) 獲得額外的 1% 準確率&#xff0c;并在此過程中啟動 GPU 實例&#xff0c;這讓人非常…

【使用webrtc-streamer解析rtsp視頻流】

webrtc-streamer WebRTC (Web Real-Time Communications) 是一項實時通訊技術&#xff0c;它允許網絡應用或者站點&#xff0c;在不借助中間媒介的情況下&#xff0c;建立瀏覽器之間點對點&#xff08;Peer-to-Peer&#xff09;的連接&#xff0c;實現視頻流和&#xff08;或&a…