spring 系列教程一:概述

概述

    Spring是一種輕量級的開發框架,它主要的功能有IOC和AOP,能夠實現組件之間的解耦。例如: 有兩個組件(對象/bean),一個A組件,一個B組件,若是A組件想要包含B組件的屬性,就必須在A組件中定義一個B組件對象的屬性。然而在Spring框架中,Spring容器會自動幫你判斷,兩個組件之間是否有聯繫,會自動將B組件注入A組件中,而不須要手動建立,以此來達到組件之間解耦的目的。spring

     我舉得作屢次數例子,就是你想買房,各處跑,很累,因此你找到了中介,spring就是中介,有了中介之後,你和房子的主人之間的關係變淡(耦合度下降),你更可能是在和中介(spring)交互apache

     在給你們舉一個栗子,就是如今不少家庭都是經過京東到家上面購買蔬菜,這樣就下降了你和蔬菜店的強關係,要是你常常買的一家店倒閉了,不要緊你能夠在京東上面的其餘店上面在買其餘的菜菜編程

Spring的優點緩存

1.非侵入式設計tomcat

Spring是一種非侵入式(non-invasive)框架,它可使應用程序代碼對框架的依賴最小化。安全

對你的代碼侵入比較低在aop裏面提現的很充分,侵入比較高服務器

2.方便解耦、簡化開發app

Spring就是一個大工廠,能夠將全部對象的建立和依賴關係的維護工做都交給Spring容器的管理,大大的下降了組件之間的耦合性。框架

3.支持AOPmaven

Spring提供了對AOP的支持,它容許將一些通用任務,如安全、事物、日誌等進行集中式處理,從而提升了程序的複用性。

4.支持聲明式事務處理

只須要經過配置就能夠完成對事物的管理,而無須手動編程。

5.方便程序的測試

Spring提供了對Junit等測試方式的支持,能夠經過註解方便的測試Spring程序。

6.方便集成各類優秀框架

Spring不排斥各類優秀的開源框架,其內部提供了對各類優秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

7.下降Jave EE API的使用難度。

Spring對Java EE開發中很是難用的一些API(如JDBC、JavaMail等),都提供了封裝,使這些API應用難度大大下降。

  • 低侵入式設計(對你的代碼侵入比較低,在aop裏面體現的很充分,異常加強、環繞加強)

  • 獨立於各類應用服務器(spring項目各類服務器均可以部署,tomcat,jetty,apache,jboss都行)

  • 依賴注入特性將組件關係透明化,下降了耦合度

  • 面向切面編程特性容許將通用任務(日誌收集,事務管理)進行集中式處理(aop來處理)

  • 與第三方框架的良好整合(spring就跟一個主板同樣,主流的框架均可以無縫集成)

依賴注入(DI)


Spring 最認同的技術是控制反轉的依賴注入(DI)模式。控制反轉(IoC)是一個通用的概念,它能夠用許多不一樣的方式去表達,依賴注入僅僅是控制反轉的一個具體的例子。

當編寫一個複雜的 Java 應用程序時,應用程序類應該儘量的獨立於其餘的 Java 類來增長這些類可重用可能性,當進行單元測試時,可使它們獨立於其餘類進行測試。依賴注入(或者有時被稱爲配線)有助於將這些類粘合在一塊兒,而且在同一時間讓它們保持獨立。

到底什麼是依賴注入?讓咱們將這兩個詞分開來看一看。這裏將依賴關係部分轉化爲兩個類之間的關聯。例如,類 A 依賴於類 B。如今,讓咱們看一看第二部分,注入。全部這一切都意味着類 B 將經過 IoC 被注入到類 A 中。

依賴注入能夠以向構造函數傳遞參數的方式發生,或者經過使用 setter 方法 post-construction。因爲依賴注入是 Spring 框架的核心部分,因此我將在一個單獨的章節中利用很好的例子去解釋這一律念。

面向方面的程序設計(AOP):


Spring 框架的一個關鍵組件是面向方面的程序設計(AOP)框架。一個程序中跨越多個點的功能被稱爲橫切關注點,這些橫切關注點在概念上獨立於應用程序的業務邏輯。有各類各樣常見的很好的關於方面的例子,好比日誌記錄、聲明性事務、安全性,和緩存等等。

在 OOP 中模塊化的關鍵單元是類,而在 AOP 中模塊化的關鍵單元是方面。AOP 幫助你將橫切關注點從它們所影響的對象中分離出來,然而依賴注入幫助你將你的應用程序對象從彼此中分離出來。

Spring 框架的 AOP 模塊提供了面向方面的程序設計實現,能夠定義諸如方法攔截器和切入點等,從而使實現功能的代碼完全的解耦出來。

Spring的體系結構:

Core Container是Spring的核心容器,Spring Core是框架最基礎的部分,提供了IoC特性

 

測試項目搭建步驟:
  1.  導入jar
  2.  編寫配置文件
  3.  寫測試代碼
 
導入jar,只須要導入spring-context, maven會自動檢查依賴,幫咱們引入依賴的jar
    
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.5.RELEASE</version>
</dependency>

 

配置文件:你能夠在網上找,須要頭部的beans約束

<?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
    1.獲取class全類名,經過反射建立一個Student類的空對象
    2.經過property獲取到Student類的屬性name,而且調用
    setName()方法將張三賦值給name屬性

    因此Student類裏面必須提供set方法,不然報錯
    -->
    <bean id="student" class="com.bdqn.zmj.entity.Student">
            <property name="name" value="張三"/>
    </bean>

</beans>
 
 
public class Student {

    private String name;

    public void setName(String name) {
            this.name = name;
    }

    public String getName() {
            return name;
    }
}

public class Main {

    /*
    spring ioc實質: 是一個map,裏面裝了全部被spring管理的(bean)對象
    因此就是一個容器

    spring ioc功能:管理組件(bean/對象)
    管理指的是:建立,初始化,銷燬等等生命週期

    因此下面我用spring建立一個Student對象
    */
    public static void main(String[] args) {

        //1.加載核心配置文件(初始化ioc容器)
        //初始化ioc容器後,學生對象已經爆保存到ioc裏面去了
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.從ioc容器裏面獲取Student對象
        Student student = ctx.getBean("student", Student.class);

        System.out.println(student.getName());
    }
}

 

 
運行結果:
 
相關文章
相關標籤/搜索