首頁>技術>

最近在各個大廠的JD中關於測試平臺開發的職位資訊頻頻曝光,有很多同學對該職位產生了極高的熱情。也有很多人對其望而卻步,認為Spring、Spring boot這些東東太深奧了,開發都很難搞定,自己是一個tester又怎能駕馭呢?為了打消大家的顧慮,我準備了一系列文章,透過我一個測試人的視角(我是從零開始學習,我懂測試同學的需求),用最通俗的語言幫大家搞定Spring基礎知識,進而快速理解Spring並在實際工作中進行應用!

Spring定義

Spring是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個元件,同時為 J2EE 應用程式開發提供整合的框架。Spring 框架的 7 個模組,如下圖所示:

每個模組的功能如下:

Spring core:核心容器提供 Spring 框架的基本功能。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。

Spring Context:Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和排程功能。

Spring AOP:透過配置管理特性,Spring AOP 模組直接將面向切面的程式設計功能 , 整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支援 AOP的物件。Spring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。透過使用 Spring AOP,不用依賴元件,就可以將宣告性事務管理整合到應用程式中。

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 Core(控制反轉技術,即IOC)和 Spring AOP,我會在後續的文章中進行詳細介紹,今天我們來重點講解Spring的環境搭建和Hello Spring Demo的編寫。

環境搭建

最簡單的方式,建立一個maven工程,pom.xml如下

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>5.2.5.RELEASE</version>

</dependency>

Spring 中的Bean

Spring容器可以被看作一個大工廠,而 Spring 容器中的 Bean 就相當於該工廠的產品。如果希望這個大工廠能夠生產和管理 Bean,這時則需要告訴容器需要哪些 Bean,以及需要以何種方式將這些 Bean 裝配到一起。

Bean 是一種JAVA語言寫成的可重用元件。為寫成JavaBean,類必須是具體的和公共的,並且具有無引數的構造器。JavaBean 透過提供符合一致性設計模式的公共方法將內部域暴露成員屬性,set和get方法獲取。總之,JavaBean就是遵循一些規範的Java類。眾所周知,屬性名稱符合這種模式,其他Java 類可以透過反射機制發現和操作這些JavaBean 的屬性。

範例程式碼如下:

public class Person {//Person類封裝的私有屬性// 姓名 String型別private String name;// 性別 String型別private String sex;// 年齡int型別private int age;//Person類的無引數構造方法public Person() {}//Person類對外提供的用於訪問私有屬性的public方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
Spring中的配置檔案

Spring配置檔案是用於指導Spring工廠進行Bean生產、依賴關係注入(裝配)及Bean例項分發的"圖紙"。Spring配置檔案是一個或多個標準的XML文件,applicationContext.xml(也可以定義為其他名字)是Spring的預設配置檔案,當容器啟動時找不到指定的配置文件時,將會嘗試載入這個預設的配置檔案。我們可以把配置檔案儲存在src/main/resources目錄下

Spring配置檔案支援兩種不同的格式,分別是 XML 檔案格式和 Properties 檔案格式。通常情況下,Spring 會以 XML 檔案格式作為Spring 的配置檔案,這種配置方式透過 XML 檔案註冊並管理 Bean 之間的依賴關係。XML 格式配置檔案的根元素是 <beans>,該元素包含了多個 <bean> 子元素,每一個 <bean> 子元素定義了一個 Bean,並描述了該 Bean 如何被裝配到 Spring 容器中。配置檔案基礎格式如下:

<?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">

<bean id="..." class="...">

</bean>

<bean id="..." class="...">

<property name=" ..." value="..."/>

</beans>

其中

xmlns表示xml需要引入的名稱空間

bean= 物件

id= 變數名,id 是bean的識別符號,要唯一,可以理解為一個例項名

class= new的類

property相當於給物件中的屬性設值

Hello Spring

寫一個類程式碼

public class HelloSpring {private String name="hello";HelloSpring(){System.out.println("Hello Spring");}public String getName() {return this.name ;}public void setName(String name) {this.name = name;}}

在配置檔案中新增HelloSpring的類配置資訊

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

https://www.springframework.org/schema/context/spring-context.xsd">

<beanid="hellospring"class="com.my.demo.HelloSpring"/>

</beans>

寫一個測試類

public class HelloTest {     public static void main(String[] args) {           //獲取spring上下文物件           ApplicationContextcontext = new ClassPathXmlApplicationContext("beans1.xml");           //我們的物件能在都在spring中管理了,我們要使用,直接取出來就可以了           HelloSpringhello = (HelloSpring) context.getBean("hellospring");           System.out.println(hello.getName());        }}

執行類HelloTest,執行結果如下:

Hello Spring //建構函式中輸出的值

Hello //getName方法中輸出的值

是不是很神奇,我們可以看到spring並沒有new 例項的過程,但是完成了例項化的操作!併成功呼叫了getName方法,這就是Spring 容器中對Bean的管理,簡單的說,就是Spring框架從配置檔案beans1.xml中獲取了類HelloSpring的例項hellospring,並自動完成了例項化的相關工作!這項技術就是IOC,我會在下一篇文章中詳細說明。

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • BAT等大廠所封殺的Android面試秘籍彙總