01.Spring5.x入門
第一章:Spring基礎
Spring概述
Spring 是一個開源的Java企業級應用開發框架。是一個分層的輕量級一站式(full-stack)框架,可以叫做家族型的框架,也可以叫做Spring全家桶。
核心
IOC 控制反轉(Inversion of Control ):Spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件,後續創作者將描述改為DI(Dependency Injection,依賴注入)。
AOP 面向切面(AOP):面向切面的程式設計,把應用業務邏輯和系統服務分開。
優點
- 作為容器,Spring 包含並管理應用中物件的生命週期和配置。
- 面向切面程式設計能幫助我們無耦合的實現日誌記錄,效能統計,安全控制
- 提供了一套MVC框架,叫SpringMVC,網際網路企業主流開發框架。
- Spring 提供一個持續的事務管理介面,能非常簡單的幫我們管理資料庫事務。
- 支援各種開源框架,可以與第三方框架(如Hibernate、Struts、MyBatis)無縫整合,而且自己也提供了一套JDBC訪問模板來方便資料庫訪問。
- 能方便的與Java EE(如Java Mail、任務排程)整合,與更多技術整合(比如快取框架)
- 異常處理:Spring 提供方便的API把具體技術相關的異常(比如由JDBC,Hibernate or JDO丟擲的)轉化為一致的unchecked 異常。
- Junit支援,可以使用Junit進行測試
Spring 的框架結構
Data Access/Integration層:包含有JDBC、ORM、OXM、JMS和Transactions模組。
Web:包含了WebSocket、Web、WebMVC、WebFlux模組。
AOP:模組提供了一個符合AOP聯盟標準的面向切面程式設計的實現。
Aspects:整合自Aspects框架,主要為AOP提供多種實現
Instrument:基於JavaSE中的java.lang.instrument
進行設計,也是為AOP的實現提供支援
Messaging:提供訊息協議支援
Core Container(核心容器):包含有Beans、Core、Context和Expression(SpEL)模組。
Test:支援使用JUnit和TestNG對Spring元件進行測試。
Spring官網介紹
- Spring 官網:https://spring.io/
- Spring 文件:https://spring.io/guides
- Spring IDE:https://spring.io/tools/sts
- Spring Project:https://spring.io/projects
- 專案快速生成器(SpringBoot):https://start.spring.io/
第一個Spring程式
-
新建一個空的 Java maven專案,命名為【spring01】
-
修改pom.xml檔案,增加如下依賴
<properties> <spring.version>5.1.5.RELEASE</spring.version> </properties> <dependencies> <!-- bean context core expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
3.在【src/main/java】下新建一個【com.hliedu.pojo.Drinks】類:
package com.hliedu.pojo; /** * - 飲品POJO * * - 帶你輕鬆學Java:恆驪學堂 * www.hliedu.com * QQ群:107184365 * */ public class Drinks { private String fruit; // 型別 private String sugar; // 糖分描述 private String size; // 大小杯 private int money; //金額 /* setter and getter */ }
4.在 【src/main/resources】 目錄下新建一個 【applicationContext.xml】 檔案,通過 xml 檔案配置的方式裝配我們的 bean:
<?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 name="drinks" class="com.hliedu.pojo.Drinks"> <property name="fruit" value="橙子"/> <property name="sugar" value="多糖"/> <property name="size" value="超大杯"/> </bean> </beans>
在 【src/test/java】下新建一個【com.hliedu.test.DrinksTest】類:
package com.hliedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.hliedu.pojo.Drinks; public class DrinksTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Drinks drinks = (Drinks)context.getBean("drinks"); String fruit = drinks.getFruit(); String size = drinks.getSize(); String sugar = drinks.getSugar(); System.out.println(drinks); System.out.println("果汁口味:" + fruit +",大小:" + size + ",是否加糖:" + sugar); } }
-
總結:
-
傳統的方式:
通過new 關鍵字主動建立一個物件 -
IOC方式:
物件的生命週期由Spring來管理,直接從Spring那裡去獲取一個物件。 IOC是反轉控制 (Inversion Of Control)的縮寫,就像控制權從本來在自己手裡,交給了Spring。