Java學習總結--064 Spring簡介

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 、SSHSSM
    概括: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 來創建 , 管理 , 裝配 !

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