日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring依赖注入和控制反转

發(fā)布時(shí)間:2023/12/3 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring依赖注入和控制反转 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1、依賴注入
    • 1.1、依賴注入和控制反轉(zhuǎn)的概念
    • 1.2、依賴注入的實(shí)現(xiàn)方式
    • 1.3、控制反轉(zhuǎn)的具體實(shí)現(xiàn)
    • 1.4、依賴注入的具體實(shí)現(xiàn)
    • 1.5、依賴注入和控制反轉(zhuǎn)總結(jié)

1、依賴注入

1.1、依賴注入和控制反轉(zhuǎn)的概念

依賴注入(Dependency Injection, 簡(jiǎn)稱DI)與控制反轉(zhuǎn)(IoC)的含義相同,只不過這兩個(gè)稱呼是從兩個(gè)角度描述的同一個(gè)概念。

當(dāng)某個(gè)Java對(duì)象(調(diào)用者)需要調(diào)用另一個(gè)Java對(duì)象(被調(diào)用者,即被依賴對(duì)象)時(shí),在傳統(tǒng)模式下,調(diào)用者通常會(huì)采用“new被調(diào)用者”的代碼方式來(lái)創(chuàng)建對(duì)象,如圖所示。這種方式會(huì)導(dǎo)致調(diào)用者與被調(diào)用者之間的耦合性增加,不利于后期項(xiàng)目的升級(jí)和維護(hù)。

在使用Spring框架之后,對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是由Spring 容器來(lái)創(chuàng)建,Spring容器會(huì)負(fù)責(zé)控制程序之間的關(guān)系,而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到了Spring 容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是Spring的控制反轉(zhuǎn)。

從Spring容器的角度來(lái)看,Spring 容器負(fù)責(zé)將被依賴對(duì)象賦值給調(diào)用者的成員變量,這相
當(dāng)于為調(diào)用者注入了它依賴的實(shí)例,這就是Spring的依賴注入。

1.2、依賴注入的實(shí)現(xiàn)方式

  • 屬性setter方法注入;
  • 構(gòu)造方法注入;
    • 屬性setter方法注入:指Spring容器使用setter 方法注入被依賴的實(shí)例。通過調(diào)用無(wú)參
      構(gòu)造器或無(wú)參靜態(tài)工廠方法實(shí)例化Bean后,調(diào)用該Bean的setter 方法,即可實(shí)現(xiàn)基于setter
      方法的依賴注入。
    • 構(gòu)造方法注入:指Spring容器使用構(gòu)造方法注入被依賴的實(shí)例。基于構(gòu)造方法的依賴注
      入通過調(diào)用帶參數(shù)的構(gòu)造方法來(lái)實(shí)現(xiàn),每個(gè)參數(shù)代表著一個(gè)依賴。

    1.3、控制反轉(zhuǎn)的具體實(shí)現(xiàn)

    1.接口

    package com.nynu.qdy.ioc; public interface UserDao{public void say() ; }

    2.接口實(shí)現(xiàn)類

    package com.nynu.qdy.impl;import com.nynu.qdy.ioc.UserDao;public class UserDaolmpl implements UserDao{public void say() {System.out.println("userDao say hello World!");} }

    3.Spring的配置文件applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><!-- 將指定類配置給Spring,讓Spring創(chuàng)建其對(duì)象的實(shí)例 --><!-- 這是SpringIOC容器的控制反轉(zhuǎn)機(jī)制 --><bean id="userDao" class="com.nynu.qdy.impl.UserDaolmpl"> </beans>

    4.測(cè)試類

    package com.nynu.qdy.ioc;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestloC {@SuppressWarnings("resource")public static void main(String[] args) {// 1.初始化spring容器,加載配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// 2.通過容器獲取userDao容器UserDao userDao = (UserDao) applicationContext.getBean("userDao");// 3.調(diào)用實(shí)例中的方法userDao.say();} }

    5.結(jié)果

    userDao say hello World!

    1.4、依賴注入的具體實(shí)現(xiàn)

    1.接口

    package com.nynu.qdy.ioc;public interface UserService {public void say(); }

    2.實(shí)現(xiàn)類

    package com.nynu.qdy.impl;import com.nynu.qdy.ioc.UserDao; import com.nynu.qdy.ioc.UserService;public class UserServiceImpl implements UserService {// 生命UserDao屬性private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}// 實(shí)現(xiàn)接口中的方法public void say() {// 調(diào)用userDao中的say()方法,并執(zhí)行輸出語(yǔ)句this.userDao.say();System.out.println("userService say hello WOrld!");}}

    3.配置文件applicationContext.xml

    <!--添加一個(gè)id為userService的實(shí)例 --><!-- 將id為userDao的Bean實(shí)例注入到userService實(shí)例中 --></bean><bean id="userService" class="com.nynu.qdy.impl.UserServiceImpl"><!-- 完成屬性賦值 --><property name="userDao" ref="userDao" /></bean>

    4.測(cè)試類

    package com.nynu.qdy.ioc;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestDI {@SuppressWarnings("resource")public static void main(String[] args) {// 1.初始化spring容器,加載配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// 2.通過容器獲取UserService實(shí)例UserService userService = (UserService) applicationContext.getBean("userService");// 3.調(diào)用實(shí)例中的say()方法userService.say();} }

    5.結(jié)果

    userDao say hello World! userService say hello WOrld!

    1.5、依賴注入和控制反轉(zhuǎn)總結(jié)

    這里是對(duì)ioc和di的總結(jié)和理解!

    總結(jié)

    以上是生活随笔為你收集整理的Spring依赖注入和控制反转的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。