Spring入門

image-20210928140431963

一、概念

  • 維基百科:

    Spring框架是 Java平臺(tái)的一個(gè)開源的全棧應(yīng)用程序框架和==控制反轉(zhuǎn)容器==實(shí)現(xiàn),一般被直接稱為 Spring。該框架的一些核心功能理論上可用于任何 Java 應(yīng)用,但 Spring 還為基于Java企業(yè)版平臺(tái)構(gòu)建的 Web 應(yīng)用提供了大量的拓展支持。Spring 沒有直接實(shí)現(xiàn)任何的編程模型,但它已經(jīng)在 Java 社區(qū)中廣為流行,基本上完全代替了企業(yè)級(jí)JavaBeans(EJB)模型。

  • 官網(wǎng):Spring Framework

  • 特點(diǎn):==控制反轉(zhuǎn)(IOC)==,==面向切面編程(AOP)==

  • image-20211018202332014

組成 Spring 框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:

  • 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory 使用控制反轉(zhuǎn)(IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。
  • Spring 上下文:Spring 上下文是一個(gè)配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如 JNDI、EJB、電子郵件、國際化、校驗(yàn)和調(diào)度功能。
  • Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的對(duì)象。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
  • Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡化了錯(cuò)誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。
  • Spring ORM:Spring 框架插入了若干個(gè) ORM 框架,從而提供了 ORM 的對(duì)象關(guān)系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
  • Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web 的應(yīng)用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/li>
  • Spring MVC 框架:MVC 框架是一個(gè)全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實(shí)現(xiàn)。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText 和 POI。

拓展

Spring Boot與Spring Cloud

  • Spring Boot 是 Spring 的一套快速配置腳手架,可以基于Spring Boot 快速開發(fā)單個(gè)微服務(wù);
  • Spring Cloud是基于Spring Boot實(shí)現(xiàn)的;
  • Spring Boot專注于快速、方便集成的單個(gè)微服務(wù)個(gè)體,Spring Cloud關(guān)注全局的服務(wù)治理框架;
  • Spring Boot使用了約束優(yōu)于配置的理念,很多集成方案已經(jīng)幫你選擇好了,能不配置就不配置 , Spring Cloud很大的一部分是基于Spring Boot來實(shí)現(xiàn),Spring Boot可以離開Spring Cloud獨(dú)立使用開發(fā)項(xiàng)目,但是Spring Cloud離不開Spring Boot,屬于依賴的關(guān)系。
  • SpringBoot在SpringClound中起到了承上啟下的作用,如果你要學(xué)習(xí)SpringCloud必須要學(xué)習(xí)SpringBoot。

二、配置

1、依賴

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.3.10</version>
</dependency>

2、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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

三、IOC理論

1、官方文檔

image-20211021100235155
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans


IOC也稱為依賴注入(DI)。它是一個(gè)過程,它對(duì)象僅通過構(gòu)造函數(shù)參數(shù)定義它們的依賴關(guān)系(即,他們使用的另一個(gè)對(duì)象),從構(gòu)造函數(shù)參數(shù),工廠方法中的參數(shù),或在從工廠方法中構(gòu)造或返回對(duì)象實(shí)例上設(shè)置的屬性。然后,容器在創(chuàng)建bean時(shí)注入這些依賴性。該過程基本上是Bean本身通過使用類別的直接構(gòu)造或諸如服務(wù)定位器模式的機(jī)制來控制其依賴關(guān)系的實(shí)例化或位置的反向(因此控制的名稱,控制)。

2、IOC本質(zhì)

控制反轉(zhuǎn)IoC(Inversion of Control),是一種設(shè)計(jì)思想,DI(依賴注入)是實(shí)現(xiàn)IoC的一種方法,也有人認(rèn)為DI只是IoC的另一種說法。沒有IoC的程序中 , 我們使用面向?qū)ο缶幊?, 對(duì)象的創(chuàng)建與對(duì)象間的依賴關(guān)系完全硬編碼在程序中,對(duì)象的創(chuàng)建由程序自己控制,控制反轉(zhuǎn)后將對(duì)象的創(chuàng)建轉(zhuǎn)移給第三方,個(gè)人認(rèn)為所謂控制反轉(zhuǎn)就是:獲得依賴對(duì)象的方式反轉(zhuǎn)了。

IoC是Spring框架的核心內(nèi)容,使用多種方式完美的實(shí)現(xiàn)了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置實(shí)現(xiàn)IoC。

Spring容器在初始化時(shí)先讀取配置文件,根據(jù)配置文件或元數(shù)據(jù)創(chuàng)建與組織對(duì)象存入容器中,程序使用時(shí)再從Ioc容器中取出需要的對(duì)象

image-20211021100326423

四、helloSpring

1、代碼示例

  • Hello.java

    public class Hello {
       private String name;
    
       public String getName() {
           return name;
      }
       public void setName(String name) {
           this.name = name;
      }
    
       public void show(){
           System.out.println("Hello,"+ name );
      }
    }
    
  • 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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!--    使用spring來創(chuàng)建對(duì)象,在spring中這些都稱為bean-->
        <bean id="hello" class="com.nie.pojo.Hello">
            <property name="str" value="Spring"/>
        </bean>
    
    
    </beans>
    
  • MyTest.java

    import com.nie.pojo.Hello;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MyTest {
        public static void main(String[] args) {
            //獲取spring的上下文對(duì)象
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            //對(duì)象現(xiàn)在都在spring中管理了,要使用直接去里面取出
            Hello hello = (Hello) context.getBean("hello");
            System.out.println(hello.toString());
        }
    }
    
    

2、總結(jié)

  • hello 對(duì)象是由Spring創(chuàng)建的
  • hello 對(duì)象的屬性是由Spring容器設(shè)置的
  • 控制 : 誰來控制對(duì)象的創(chuàng)建 , 傳統(tǒng)應(yīng)用程序的對(duì)象是由程序本身控制創(chuàng)建的 , 使用Spring后 , 對(duì)象是由Spring來創(chuàng)建的
  • 反轉(zhuǎn) : 程序本身不創(chuàng)建對(duì)象 , 而變成被動(dòng)的接收對(duì)象
  • 依賴注入 : 就是利用set方法來進(jìn)行注入的
  • IOC是一種編程思想,由主動(dòng)的編程變成被動(dòng)的接收
  • ==所謂的IoC : 對(duì)象由Spring 來創(chuàng)建 , 管理 , 裝配 !==
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一篇本文主要介紹了Spring的基本概念以及如何快速編寫一個(gè)Spring項(xiàng)目,并讓它運(yùn)行起來。 Spring 概...
    冢狐閱讀 275評(píng)論 0 0
  • Spring 是最受歡迎的企業(yè)級(jí) Java 應(yīng)用程序開發(fā)框架。數(shù)以百萬的來自世界各地的開發(fā)人員使用 Spring ...
    LU7IN閱讀 263評(píng)論 0 1
  • 一:Spring的特點(diǎn) 1、Spring:春天;--給軟件行業(yè)帶來了春天2、理念:使現(xiàn)有的技術(shù)更加實(shí)用。本身是大雜...
    筆者7閱讀 2,438評(píng)論 1 1
  • Spring 1、Spring 簡介 Spring 是于 2003 年興起的一個(gè)輕量級(jí)的 Java 開發(fā)框架,它是...
    瑾墨QAQ閱讀 651評(píng)論 0 0
  • Spring全家桶 Spring Framework核心 Spring Boot構(gòu)建項(xiàng)目,在其基礎(chǔ)上開發(fā)更容易更方...
    iuiyiyut閱讀 337評(píng)論 0 0

友情鏈接更多精彩內(nèi)容