大家可以關註作者的賬號,關註從零開始學Spring筆記文集。也可以根據目錄前往作者的博客園博客進行學習。本片文件將基於黑馬程式員就業班視頻進行學習以及資料的分享,並記錄筆記和自己的看法。歡迎大家一起學習和討論。 "【從零開始學Spring筆記】Spring學習路線" 什麼是IoC 控制反轉(Inve ...
大家可以關註作者的賬號,關註從零開始學Spring筆記文集。也可以根據目錄前往作者的博客園博客進行學習。本片文件將基於黑馬程式員就業班視頻進行學習以及資料的分享,並記錄筆記和自己的看法。歡迎大家一起學習和討論。
【從零開始學Spring筆記】Spring學習路線
什麼是IoC
控制反轉(Inversion of Control,縮寫為IoC),是面向對象編程中的一種設計原則,可以用來降低代碼之間的耦合度。其中最常見的方式叫做依賴註入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被註入到對象中。
簡單來說就是將創建對象的權力反轉給Spring。
下載Spring的開發包
官網:http://spring.io/,朋友們可以去官網也在。同時作者已經下好,並且上次百度雲盤,如果想下載的朋友們可以去本系列文集的第一篇【從零開始學Spring筆記】Spring4學習路線中尋找。
下載後解壓如圖
docs :Spring的開發規範和API
libs :Spring的開發的jar和源碼
schema :Spring的配置文件的約束
IoC的原理
傳統的方式我們在使用介面或者對象時都需要new一個對象出來,如果想要更改對象,例如底層的方法,需要重新new,十分複雜,並且耦合性高。而spring通過工廠+反射+配置文件的方法實現了程式的解耦合,而且只需要修改配置文件即可實現底層的更換。
創建項目測試
第一步:創建web項目,引入jar包
可以在剛剛下載解壓後的libs文件夾中尋找,但有的不在此包內,比較難找。所以上傳到百度雲了,下載即可。下載鏈接在本系列文集的第一篇【從零開始學Spring筆記】Spring4學習路線中尋找。
第二步:創建類和介面
package com.tyust.spring.demo01;
/*
* 用戶管理DAO介面
*/
public interface UserDAO {
public void save();
}
package com.tyust.spring.demo01;
/*
* 用戶管理DAO實現類
*/
public class UserDAOImpl implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImpl執行了...");
}
}
package com.tyust.spring.demo01;
/*
* 用戶管理DAOHibernate實現類
*/
public class UserDAOHibernateImpl implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOHibernateImpl執行了...");
}
}
第三步:將實現類交給Spring管理
在spring的解壓路徑下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
打開找到(在最下麵),複製選中部分,進行配置文件的編寫
<?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 = "UserDAO" class = "com.tyust.spring.demo01.UserDAOHibernateImpl"></bean>
</beans>
第四步:編寫測試類
package com.tyust.spring.demo01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
* 測試類
*/
public class SpringDemo1 {
public static void main(String[] args) {
demo2();
}
/**
* 傳統的調用方法
*/
public void demo1() {
UserDAO ud = new UserDAOImpl() ;
ud.save();
}
/*
* Spring的調用方法
*/
public static void demo2() {
//ClassPathXmlApplicationContext是配置文件的路徑,applicationcontext.xml是配置文件的名稱
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");
UserDAO ud = (UserDAO) applicationContext.getBean("UserDAO");
ud.save();
}
}
第五步:輸出結果
如果想要更換底層,只需要更改配置文件中的class即可。
IOC和DI
IOC:控制反轉,將對象的創建權反轉給了Spring。
DI:依賴註入,前提必須有IOC的環境,Spring管理這個類的時候將類的依賴的屬性註入(設置)進來。
1.依賴
Class A{}
Class B{
public void xxx(A a){ }
}
2.繼承:is a
Class A{}
Class B extends A{}
3.聚合:has a
還是上面的例子,如果UserDAO的實現類有自己的屬性,併在語句中輸出
package com.tyust.spring.demo01;
/*
* 用戶管理DAOHibernate實現類
*/
public class UserDAOHibernateImpl implements UserDAO {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void save() {
System.out.println("UserDAOHibernateImpl執行了..."+name);
}
}
使用傳統的方法就必須放棄面向介面編程,需要對實現類實例化才能賦值
/**
* 傳統的調用方法
*/
public void demo1() {
UserDAOHibernateImpl ud = new UserDAOHibernateImpl() ;
ud.setName("張飛");
ud.save();
}
但是使用Spring,就可以用關鍵字property進行配置。
<!-- Spring的配置文件=============== -->
<bean id = "UserDAO" class = "com.tyust.spring.demo01.UserDAOHibernateImpl">
<property name="name" value="劉備"></property>
</bean>