本文主要是對於spring ioc簡單入門做一些介紹,並不深入瞭解,只接觸表面,對一些較複雜的內容也不過多描述。如文中有錯誤之處,望不吝賜教,謝謝~
一、IoC簡介
IoC作爲spring的核心概念之一,很有必要好好學習學習。
IoC 全稱爲Inversion of Control,意爲 “控制反轉”,是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。其中控制指的是ioc容器控制對象,反轉指的是對象獲取由原先的主動獲取變爲被動接收。
ioc的思想最核心的地方在於,資源不由使用資源的雙方管理,而由不使用資源的第三方管理,這可以帶來很多好處。第一,資源集中管理,實現資源的可配置和易管理。第二,降低了使用資源雙方的依賴程度(耦合度)。
在ioc中,最常見的方式叫做依賴注入Dependency Injection),即對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。
二、Spring IoC的簡單使用
(1)新建一個maven項目,並引入spring依賴
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
(2)本實例的研究對象是用戶(user)相應的處理代碼如下所示:
IUserDao
package com.example.dao;
public interface IuserDao {
/**
* 模擬保存用戶
*/
void saveUser();
}
UserDaoImpl
package com.example.dao.impl;
import com.example.dao.IuserDao;
public class UserDaoImpl implements IuserDao {
/**
* 模擬保存用戶
*/
public void saveUser() {
System.out.println("保存了用戶");
}
}
IUserService
package com.example.service;
public interface IUserService {
/**
* 模擬保存用戶
*/
public void saveUser();
}
UserServiceImpl
package com.example.service.impl;
import com.example.dao.IuserDao;
import com.example.dao.impl.UserDaoImpl;
import com.example.service.IUserService;
public class UserServiceImpl implements IUserService {
private IuserDao userDao=new UserDaoImpl();
public void saveUser(){
userDao.saveUser();
}
}
Client
package com.example.ui;
import com.example.service.IUserService;
import com.example.service.impl.UserServiceImpl;
public class Client {
public static void main(String[] args) {
IUserService userService=new UserServiceImpl();
userService.saveUser();
}
}
(3)在resources目錄下創建bean的配置文件bean.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.xsd">
<!--把對象的創建交給spring來管理-->
<bean id="userService" class="com.example.service.impl.UserServiceImpl"/>
<bean id="userDao" class="com.example.dao.impl.UserDaoImpl"/>
</beans>
(4)在Client裏面獲取spring ioc容器和bean對象
Client
package com.example.ui;
import com.example.dao.IuserDao;
import com.example.service.IUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
/**
* 獲取spring ioc容器
* @param args
*/
public static void main(String[] args) {
//獲取ioc容器對象
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
//獲取bean對象
IuserDao userDao= (IuserDao) applicationContext.getBean("userDao");
IUserService userService= (IUserService) applicationContext.getBean("userService");
//測試
System.out.println("userDao對象:" +userDao);
System.out.println("userService對象:" +userService);
}
}
運行main函數得到如下結果,說明通過ioc管理對象成功
三、總結
在上面的實例當中,我們在創建IUserDao對象時,並沒有像常規那樣使用構造函數去創建對象,而是藉助spring的applicationContext去獲取對象,這就體現了ioc的核心思想:資源不由使用資源的雙方管理,而由不使用資源的第三方管理,這裏的第三方即是ioc容器。
關於ioc的內容很複雜,對於初學者而言,我們只需要知道其可以降低程序的耦合性,在創建一些對象時可以通過編寫一些配置文件和使用spring的相關方法來創建對象即可,對於更細緻的理解需要不斷實踐纔可知悉,因爲ioc所涉及的內容還是比較的抽象和繁雜。
2020.03.17