javascript
Spring核心之对 IOC的理解
Spring核心之對 IOC的理解
? ? ? ? ?
? ? ? ? ? ? ? ?Spring是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架。
一 、IOC
?IOC : Inversion of Control,中文譯為“控制反轉”,IOC不是一種技術,而是一種設計思想。
? ? ? ? ? ? ? Ioc意味著將設計好的對象交給容器控制,而不是傳統的在對象內部直接通過new進行創建對象。
?傳統的程序設計是通過new主動創建對象,然后再通過對象調用方法,類似以下代碼:
1 、先創建一個接口:
public interface UserDao { public void save();}2 、創建接口的實現類:
public class UserDaoImpl implements UserDao { public void save() { System.out.println("save方法執行了..."); } }3、編寫一個測試類:通過new主動創建對象并調用方法
public class SpringDemo1 { /** * 傳統方式的調用 */ public void demo1(){ UserDao userDao = new UserDaoImpl(); //創建對象 userDao.save(); //通過對象調用方法 } }? ? ? 這樣的程序設計會導致類與類之間高耦合,一旦后期維護,程序不想通過UserDaoImpl 來實例化userDao對象,而想通過另一個實現類 UserDaoIocImpl 來實例化userDao對象 ,就需要修改源代碼為 UserDao userDao = new UserDaoIocImpl();???不易于后期維護。
IOC :將設計好的對象交給容器控制,由容器幫我們創建并實例化對象 ,而我們可以通過外部xml配置文件來告訴容器我們需要哪個實現類來實例化對象?,一旦我們需要更改實現類,則直接修改xml配置文件即可。就能夠在不修改源代碼的情況下,維護程序。??
首先編寫一個將對象交給容器控制的程序:
1 、先創建一個接口:
public interface UserDao { public void save();}2 、創建接口的實現類:?
public class UserDaoImpl implements UserDao { public void save() { System.out.println("IOC容器調用的save方法執行了..."); } }?3 、創建applicationContext.xml配置文件,將實現類交給Spring管理,即告訴容器調用哪個實現類實例化對象
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"> <!-- 設置一個id, class為實現類的全路徑,告訴容器調用這個實現類實例化對象--> <bean id="userDao" class="com.czm.spring.demo1.UserDaoImpl"></bean> </beans>4 、編寫測試類
public class SpringDemo1 { /** * Spring IOC容器的方式的調用 */ public void demo2(){ // 創建Spring的工廠來加載xml配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //讀取到我們告訴容器需要哪個實現類來實例化對象 UserDao userDao = (UserDao) applicationContext.getBean("userDao"); //此處的參數為xml配置文件中 <bean>標簽中id的值 userDao.save(); }當我們需要將實現類UserDaoImpl更換為UserDaoIocImpl時,只需修改xml配置文件<bean>標簽中 class 的路徑,將其修改為UserDaoIocImpl 類的全路徑即可,其余代碼無需修改
<bean id="userDao" class="com.czm.spring.demo1.UserDaoIocImpl"></bean>?
二 、DI
DI :Dependency Injection,即“依賴注入” 。在IOC環境下,Spring管理的這個實現類在執行時依賴的一些屬性,可直接在類? ? ? ? ? 中注入,以供使用。
1 、比如?UserDaoImpl 實現類在執行時需要用到 name 屬性,可直接定義 name 屬性并提供 set 方法
public class UserDaoImpl implements UserDao { //依賴注入 private String name; public void setName(String name) { this.name = name; } public void save() { System.out.println("save方法執行了..."+name); //執行時直接使用注入的屬性 } }? 在xml配置文件中通過<property>標簽為 name 屬性賦值
<bean id="userDao" class="com.czm.spring.demo1.UserDaoImpl"> <property name="name" value="依賴注入的name屬性"></property> </bean>?
?
2 、當我們需要 調用業務層 Service 方法時 也可注入Service? ,前提是在IOC環境下,即Service實現類也交給了Spring 管理了
?注入Service,提供 set 方法
//注入Service private UserService userService; //提供Set方法 public void setUserService(UserService userService) { this.userService = userService; }在xml配置文件中通過<property>標簽來配置Service ,name 和 ref 屬性值與配置Service 是 id 值相同
?可直接調用Service 方法
public String regist(){ userService.regist(user); //調用依賴注入的Service方法 return LOGIN; }?
轉載于:https://www.cnblogs.com/czmblog0/p/10540127.html
總結
以上是生活随笔為你收集整理的Spring核心之对 IOC的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员下班回家,路上被拦…
- 下一篇: 火遍全网的Hutool,如何使用Buil