1、spring簡介
Spring官網:https://spring.io/
Spring下載:https://spring.io/projects/spring-framework#learn
SpringGithub地址:https://github.com/spring-projects/spring-framework
Spring官網下載地址:https://repo.spring.io/release/org/springframework/spring/
在下載軟件會遇到諸如release,stable,alpha,beta,pre,current,eval,rc,snapshot等版本,尤其在下載插件時最常見。
各個不同版本說明:
1,snapshot(快照),也即開發版,我們創建maven項目時,編輯器會自動給我們填入 1.0-SNAPSHOT版本,也就是1.0開發版,這個版本不能使用,因爲該版本處於開發的過程,所以運行時會不時地更新,導致功能變化,正式環境中不得使用snapshot版本的庫;
2,alpha,內部測試版,來源於字母α,是比較早的版本,主要是給開發人員和測試人員測試和找BUG用的,不建議使用;
3,beta,公開測試版,來源於字母β,這是比alpha進一步的版本,面向公衆測試,但是不建議使用;
4,pre,這個和alpha版本類似,有時還會細分爲M1,M2版本,不建議使用;
5,RC(Release Candidate) 顧名思義麼 ! 用在軟件上就是候選版本。系統平臺上就是發行候選版本;
6,GA(General Availability)正式發佈的版本,在國外都是用GA來說明release版本的;
7,release,發行版,這是release的中文意思,也就是官方推薦使用的版本;
8,stable,穩定版,這個版本相比於測試版更加穩定,去除了測試版許多的bug,完善了一些功能,建議使用;
9,current,最新版,但是不一定是穩定版本,需要看一下是否還有release或者stable等版本;
10,eval,評估版。可能會有一個月或者固定時間的使用期限;
Spirng優點
- Spring是開源,免費的。
- Spring是一個輕量級的框架,非入侵式的框架。
(沒有任何其他的依賴,使用他,不需要導入其他的包) - IOC AOP
- 控制反轉
- 面向切面編程
- 對事務的支持
- 對框架的支持,不需要任何成本就可以引入其他框架。MyBatis、Hibernate,Strut1/2,SpringMVC 、SSH、SSM
概括:Spring是一個輕量級的控制反轉【IOC】和麪向切面【AOP】的(容器)框架。
OOP: 面向對象編程
Spring想做粘合劑。—> 發展出來一套自己的生態;
Spring組成
架構 : mvc三層架構
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在覈心容器之上,核心容器定義了創建、配置和管理 bean 的方式。
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是
BeanFactory
,它是工廠模式的實現。BeanFactory
使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。 - Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
- Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。
- Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
- Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
- Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
- Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。
Spring的組件:
SpringBoot 和 Spring Cloud
Spring Boot :一款可以快速構建Spring應用的腳手架; 約定大於配置 , 承上啓下。
Spring Cloud:基於SpringBoot實現的;他是一個生態圈;
2、IOC推導
目的:解決企業應用開發的複雜性
功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
範圍:任何Java應用
Spring是一個輕量級控制反轉(IoC)和麪向切面(AOP)的容器框架。
分析實現
我們使用原來的方式寫一段代碼測試:dao–service—前端
思考:現在前端傳遞或者調用不會變,所有操作都是我們程序猿來實現;
解決方案:前端操作,後臺不變;留一個調用的接口
IOC的原型。
IOC的本質
控制反轉 (inversion of Control):IOC
他是一種設計思想。 根據這個思想有實現的方式,DI : 依賴注入。
本質就是設置接口 , set方法,是一種抽象思維
反轉: 從被動到主動 , 程序猿主動控制 到 被動接受 , 由編寫代碼,編寫接口,程序具有高度配置性和動態性;
讓程序的耦合性大大降低。方便模塊獨立:----> 微服務。解耦 。
3. HelloSpring
1.導入jar包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
2.創建實體類
public class Hello {
private String name;
public Hello() {
}
public Hello(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+name);
}
@Override
public String toString() {
return "Hello{" +
"name='" + name + '\'' +
'}';
}
}
3.編寫Spring的配置文件
beans.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">
<!--bean就是一個java對象,由Spring管理和創建-->
<bean id="hello" class="com.kuang.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
<!--bean就是一個java對象,由Spring管理和創建-->
<bean id="hello2" class="com.kuang.pojo.Hello">
<property name="name" value="WestOS"/>
</bean>
<!--// Hello hello2 = new Hello();-->
<!--// hello2.setName (WestOS)-->
</beans>
4.測試類
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloTest {
@Test
public void test(){
//解析beans.xml配置文件,生產管理相應的Bean對象;
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//通過Bean得到這個對象的實體
Hello hello = (Hello)context.getBean("hello2");
hello.show();
}
}
思考問題?
- Hello對象是由誰創建的?
- hello對象是由Spring創建的。
- beans.xml ----> 管理bean,Java對象 , Spring就像一個容器,存放了許多的對象;
- 解析配置文件
- 通過反射創建對象並且設置值
- Hello對象的屬性是怎麼設置值的?
- hello對象的屬性是由Spring容器創建的。
這個過程就叫控制反轉:IOC
控制:誰來控制對象的創建? 原來 :程序猿來控制, 使用Spring後,Spring來創建對象的
反轉:程序本身不創建對象了,變成被動接受對象。
依賴注入:DI ,本質就是利用set方式來注入的。
IOC是一種編程思想。由主動的編程到被動的接受;
4、 修改測試Demo
使用spring完成之前 Oracle 和 Mysql 獲取用戶信息的小Demo;
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress SpringFacetInspection -->
<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">
<bean id="UserDaoImpl" class="com.kuang.dao.UserDaoImpl"/>
<bean id="UserDaoMysqlImpl" class="com.kuang.dao.UserDaoMysqlImpl"/>
<bean id="UserDaoOracleDao" class="com.kuang.dao.UserDaoOracleDao"/>
<bean id="ServiceImpl" class="com.kuang.service.UserServiceImpl">
<!--普通的值使用value,引用其他bean使用ref-->
<property name="userDao" ref="UserDaoMysqlImpl"/>
</bean>
</beans>
測試類
public class SpringTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl userService = (UserServiceImpl) context.getBean("ServiceImpl");
userService.getUser();
}
}
要實現不同的操作 , 只需要在xml配置文件中進行修改 , 所謂的IoC,一句話搞定 : 對象由Spring 來創建 , 管理 , 裝配 !