當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring依赖注入和控制反转
生活随笔
收集整理的這篇文章主要介紹了
Spring依赖注入和控制反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1、依賴注入
- 1.1、依賴注入和控制反轉的概念
- 1.2、依賴注入的實現方式
- 1.3、控制反轉的具體實現
- 1.4、依賴注入的具體實現
- 1.5、依賴注入和控制反轉總結
1、依賴注入
1.1、依賴注入和控制反轉的概念
依賴注入(Dependency Injection, 簡稱DI)與控制反轉(IoC)的含義相同,只不過這兩個稱呼是從兩個角度描述的同一個概念。
當某個Java對象(調用者)需要調用另一個Java對象(被調用者,即被依賴對象)時,在傳統模式下,調用者通常會采用“new被調用者”的代碼方式來創建對象,如圖所示。這種方式會導致調用者與被調用者之間的耦合性增加,不利于后期項目的升級和維護。
在使用Spring框架之后,對象的實例不再由調用者來創建,而是由Spring 容器來創建,Spring容器會負責控制程序之間的關系,而不是由調用者的程序代碼直接控制。這樣,控制權由應用代碼轉移到了Spring 容器,控制權發生了反轉,這就是Spring的控制反轉。
從Spring容器的角度來看,Spring 容器負責將被依賴對象賦值給調用者的成員變量,這相
當于為調用者注入了它依賴的實例,這就是Spring的依賴注入。
1.2、依賴注入的實現方式
- 屬性setter方法注入:指Spring容器使用setter 方法注入被依賴的實例。通過調用無參
構造器或無參靜態工廠方法實例化Bean后,調用該Bean的setter 方法,即可實現基于setter
方法的依賴注入。 - 構造方法注入:指Spring容器使用構造方法注入被依賴的實例。基于構造方法的依賴注
入通過調用帶參數的構造方法來實現,每個參數代表著一個依賴。
1.3、控制反轉的具體實現
1.接口
package com.nynu.qdy.ioc; public interface UserDao{public void say() ; }2.接口實現類
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創建其對象的實例 --><!-- 這是SpringIOC容器的控制反轉機制 --><bean id="userDao" class="com.nynu.qdy.impl.UserDaolmpl"> </beans>4.測試類
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.調用實例中的方法userDao.say();} }5.結果
userDao say hello World!1.4、依賴注入的具體實現
1.接口
package com.nynu.qdy.ioc;public interface UserService {public void say(); }2.實現類
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;}// 實現接口中的方法public void say() {// 調用userDao中的say()方法,并執行輸出語句this.userDao.say();System.out.println("userService say hello WOrld!");}}3.配置文件applicationContext.xml
<!--添加一個id為userService的實例 --><!-- 將id為userDao的Bean實例注入到userService實例中 --></bean><bean id="userService" class="com.nynu.qdy.impl.UserServiceImpl"><!-- 完成屬性賦值 --><property name="userDao" ref="userDao" /></bean>4.測試類
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實例UserService userService = (UserService) applicationContext.getBean("userService");// 3.調用實例中的say()方法userService.say();} }5.結果
userDao say hello World! userService say hello WOrld!1.5、依賴注入和控制反轉總結
這里是對ioc和di的總結和理解!
總結
以上是生活随笔為你收集整理的Spring依赖注入和控制反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 知识点详解
- 下一篇: 联想笔记本一直显示配置更新,一个多小时了