Java Spring框架 (底層原理+入門)

Java Spring框架

Spring

一、Spring的概述

定義:
Spring框架是一個開放源代碼的J2EE應用程序框架,由Rod Johnson發起,是針對bean的生命週期進行管理的輕量級容器(lightweight container)。

Spring解決了開發者在J2EE開發中遇到的許多常見的問題,提供了功能強大IOC、AOP及Web MVC等功能。

Spring可以單獨應用於構築應用程序,也可以和Struts、Webwork、Tapestry等衆多Web框架組合使用,並且可以與 Swing等桌面應用程序AP組合。

因此, Spring不僅僅能應用於JEE應用程序之中,也可以應用於桌面應用程序以及小應用程序之中。Spring框架主要由七部分組成:
分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

1、簡單的來講:Spring:SE/EE開發的一站式框架。

(1)一佔式框架:有EE開發的每一層的解決方案。

a、Web層:SpringMVC
b、Service層:Spring的Bean管理,Spring聲明式事務。
c、DAO層:Spring的JDBC模板,Spring的ORM模塊。
在一般的Java程序當中也可以使用

2、爲什麼要學習Spring框架

(1)方便解耦,簡化開發

通過Spring提供的IoC容器,我們可以將對象之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程序耦合。
有了Spring,用戶不必再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注於上層的應用。

(2)AOP編程的支持

通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。

(3)聲明式事務的支持

在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。

(4)方便程序的測試

可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring裏,測試不再是昂貴的操作,而是隨手可做的事情。
例如:Spring對Junit4支持,可以通過註解方便的測試Spring程序。

(5)方便集成各種優秀框架

Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

(6)降低Java EE API的使用難度

Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大爲降低。

(7)Java 源碼是經典學習範例

Spring的源碼設計精妙、結構清晰、匠心獨運,處處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣。
Spring框架源碼無疑是Java技術的最佳實踐範例。
如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。

二、Spring的入門(IOC)

1、什麼是IOC

控制反轉(Inversion of Control,縮寫爲IoC)
是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。
控制反轉:將對象的創建權反轉(交給)Spring。

其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI)
還有一種方式叫“依賴查找”(Dependency Lookup)。

通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。

2、要下載Spring的開發包

官網:
https://spring.io/

3、解壓Spring的開發包

解壓dist結尾的文件
在這裏插入圖片描述
docs:Spring docs:Spring 開發的規範和API
libs:Spring的開發jar和源碼
schema:Spring的配置文件的約束

4、Spring的體系結構

在這裏插入圖片描述

5、創建web項目,引入jar(引入Spring核心包:Beans,Core,Context,SpEL)

在這裏插入圖片描述
在這裏插入圖片描述

6、引入日誌包(spring-dependencies)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
完成引入
在這裏插入圖片描述

6、創建對應的接口和類

(1)傳統方式,實現接口和方法
package com.itzheng.spring.demo1;
/*
 * 用戶管理的業務層管理
 */
public interface UserDao {
	public void save();
}
package com.itzheng.spring.demo1;
/*
 * 用戶管理的業務層實現類
 */
public class UserDaoImpl implements UserDao {
	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("UserService執行了。。。");
	}
}
package com.itzheng.spring.demo1;

import org.junit.Test;

/*
 * Spring的入門
 */
public class SpringDemo1 {
	@Test
	/*
	 * 傳統方式的調用
	 */
	public void demo1() {
		UserDao service = new UserDaoImpl();
		service.save();
	}
}

這種傳統的方式的缺點:當我們要把底層換成Hibernate的時候還得需要重新創建接口和實現類,或者修改此類

package com.itzheng.spring.demo1;
public class UserDaoHibernateImpl implements UserDao {
	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("UserDaoHibernateImpl執行了");
	}
}
package com.itzheng.spring.demo1;
import org.junit.Test;
public class SpringDemo1 {
	@Test
	/*
	 * 傳統方式的調用
	 */
	public void demo1() {
		UserDao service = new UserDaoHibernateImpl();
		service.save();
	}
}

每次切換底層的實現類都需要改變代碼,不是很方便

(2)不修改程序的源代碼,來擴展功能 (原理)

Spring的ICO的底層實現原理
在這裏插入圖片描述
通過配置文件找到對應的類,通過反射來獲取到該類的對象,並實現該對象,實現其方法和功能

6、將實現類都交給Spring去管理

(1)在src下創建applicationContext.xml

spring-framework-4.2.4.RELEASE-dist\spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\ xsd-configuration.html

引入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.xsd">
    <!-- Spring入門的配置 -->
    <!-- id:接口的名稱  class:實現類全路徑   就將這個類交給Spring管理了  -->
    <bean id="userDao" class="com.itzheng.spring.demo1.UserDaoImpl"></bean>
</beans>

7、編寫測試類

package com.itzheng.spring.demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
 * Spring的入門
 */
public class SpringDemo1 {
	@Test
	/*
	 * 傳統方式的調用
	 */
	public void demo1() {
		UserDao service = new UserDaoHibernateImpl();
		service.save();
	}
	@Test
	//Spring的方式的調用
	public void demo2() {
		//創建Spring的工廠(參數是配置文件XML的名稱)
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//通過工廠,解析XML,反射對應類名稱,活動對應的對象
		UserDao userdao = (UserDao)applicationContext.getBean("userDao");
		userdao.save();
	}
}

在這裏插入圖片描述

8、切換底層的實現類的時候,只需要在XML當中修改class的路徑名稱即可

在這裏插入圖片描述
測試
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章