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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring核心之对 IOC的理解

發(fā)布時(shí)間:2025/3/16 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring核心之对 IOC的理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring核心之對(duì) IOC的理解

? ? ? ? ?

? ? ? ? ? ? ? ?Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架。

一 、IOC

?IOC : Inversion of Control,中文譯為“控制反轉(zhuǎn)”,IOC不是一種技術(shù),而是一種設(shè)計(jì)思想

? ? ? ? ? ? ? Ioc意味著將設(shè)計(jì)好的對(duì)象交給容器控制,而不是傳統(tǒng)的在對(duì)象內(nèi)部直接通過new進(jìn)行創(chuàng)建對(duì)象。

?傳統(tǒng)的程序設(shè)計(jì)是通過new主動(dòng)創(chuàng)建對(duì)象,然后再通過對(duì)象調(diào)用方法,類似以下代碼:

1 、先創(chuàng)建一個(gè)接口:

public interface UserDao { public void save();}

2 、創(chuàng)建接口的實(shí)現(xiàn)類:

public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("save方法執(zhí)行了..."); } }

3、編寫一個(gè)測試類:通過new主動(dòng)創(chuàng)建對(duì)象并調(diào)用方法

public class SpringDemo1 { @Test /** * 傳統(tǒng)方式的調(diào)用 */ public void demo1(){ UserDao userDao = new UserDaoImpl(); //創(chuàng)建對(duì)象 userDao.save(); //通過對(duì)象調(diào)用方法 } }

? ? ? 這樣的程序設(shè)計(jì)會(huì)導(dǎo)致類與類之間高耦合,一旦后期維護(hù),程序不想通過UserDaoImpl 來實(shí)例化userDao對(duì)象,而想通過另一個(gè)實(shí)現(xiàn)類 UserDaoIocImpl 來實(shí)例化userDao對(duì)象 ,就需要修改源代碼為 UserDao userDao = new UserDaoIocImpl();???不易于后期維護(hù)。

IOC :將設(shè)計(jì)好的對(duì)象交給容器控制,由容器幫我們創(chuàng)建并實(shí)例化對(duì)象 ,而我們可以通過外部xml配置文件來告訴容器我們需要哪個(gè)實(shí)現(xiàn)類來實(shí)例化對(duì)象?,一旦我們需要更改實(shí)現(xiàn)類,則直接修改xml配置文件即可。就能夠在不修改源代碼的情況下,維護(hù)程序。??

首先編寫一個(gè)將對(duì)象交給容器控制的程序:

1 、先創(chuàng)建一個(gè)接口:

public interface UserDao { public void save();}

2 、創(chuàng)建接口的實(shí)現(xiàn)類:?

public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("IOC容器調(diào)用的save方法執(zhí)行了..."); } }

?3 、創(chuàng)建applicationContext.xml配置文件,將實(shí)現(xiàn)類交給Spring管理,即告訴容器調(diào)用哪個(gè)實(shí)現(xiàn)類實(shí)例化對(duì)象

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" 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.xsd"> <!-- 設(shè)置一個(gè)id, class為實(shí)現(xiàn)類的全路徑,告訴容器調(diào)用這個(gè)實(shí)現(xiàn)類實(shí)例化對(duì)象--> <bean id="userDao" class="com.czm.spring.demo1.UserDaoImpl"></bean> </beans>

4 、編寫測試類

public class SpringDemo1 { @Test /** * Spring IOC容器的方式的調(diào)用 */ public void demo2(){ // 創(chuàng)建Spring的工廠來加載xml配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //讀取到我們告訴容器需要哪個(gè)實(shí)現(xiàn)類來實(shí)例化對(duì)象 UserDao userDao = (UserDao) applicationContext.getBean("userDao"); //此處的參數(shù)為xml配置文件中 <bean>標(biāo)簽中id的值 userDao.save(); }

當(dāng)我們需要將實(shí)現(xiàn)類UserDaoImpl更換為UserDaoIocImpl時(shí),只需修改xml配置文件<bean>標(biāo)簽中 class 的路徑,將其修改為UserDaoIocImpl 類的全路徑即可,其余代碼無需修改

<bean id="userDao" class="com.czm.spring.demo1.UserDaoIocImpl"></bean>

?

二 、DI

DI :Dependency Injection,即“依賴注入” 。在IOC環(huán)境下,Spring管理的這個(gè)實(shí)現(xiàn)類在執(zhí)行時(shí)依賴的一些屬性,可直接在類? ? ? ? ? 中注入,以供使用。

1 、比如?UserDaoImpl 實(shí)現(xiàn)類在執(zhí)行時(shí)需要用到 name 屬性,可直接定義 name 屬性并提供 set 方法

public class UserDaoImpl implements UserDao { //依賴注入 private String name; public void setName(String name) { this.name = name; } @Override public void save() { System.out.println("save方法執(zhí)行了..."+name); //執(zhí)行時(shí)直接使用注入的屬性 } }

? 在xml配置文件中通過<property>標(biāo)簽為 name 屬性賦值

<bean id="userDao" class="com.czm.spring.demo1.UserDaoImpl"> <property name="name" value="依賴注入的name屬性"></property> </bean>

?

?

2 、當(dāng)我們需要 調(diào)用業(yè)務(wù)層 Service 方法時(shí) 也可注入Service? ,前提是在IOC環(huán)境下,即Service實(shí)現(xiàn)類也交給了Spring 管理了

?注入Service,提供 set 方法

//注入Service private UserService userService; //提供Set方法 public void setUserService(UserService userService) { this.userService = userService; }

在xml配置文件中通過<property>標(biāo)簽來配置Service ,name 和 ref 屬性值與配置Service 是 id 值相同

?可直接調(diào)用Service 方法

public String regist(){ userService.regist(user); //調(diào)用依賴注入的Service方法 return LOGIN; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/czmblog0/p/10540127.html

總結(jié)

以上是生活随笔為你收集整理的Spring核心之对 IOC的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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