spring之旅第一篇-初識spring

来源:https://www.cnblogs.com/yuanqinnan/archive/2019/01/16/10274934.html
-Advertisement-
Play Games

一、概述 只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用於構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和麵向切麵編程(AOP)。spring有如下特點: 輕量級:應用大小和應用開支,包括應用方式 DI/IoC:提供松耦合 ...


一、概述

只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用於構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和麵向切麵編程(AOP)。spring有如下特點:

  1. 輕量級:應用大小和應用開支,包括應用方式

  2. DI/IoC:提供松耦合的一種實現技術

  3. AOP:切麵編程將業務邏輯從應用服務中分離

  4. 容器:包含並管理應用對象的生命周期和配置

  5. 框架:使用組件配置組合成複雜的應用,並提供很多基礎功能

由於spring是一個容器型的框架,所以它不排斥其他框架,並且可以輕鬆的整合其他框架。

Spring以一種非侵入式的方式來管理你的代碼,Spring提倡”最少侵入”,這也就意味著你可以適當的時候安裝或卸載Spring 。

二、模塊

Spring框架大約由20多個小模塊組成,這些模塊分為:核心容器,數據訪問/集成,Web,面向切麵編程(AOP),消息和測試等等,如下圖所示

下麵逐一介紹這幾大模塊:

1.核心容器:核心容器包括spring-core, spring-beans,spring-context, spring-context-support, 和spring-express,其中spring-core和spring-beans模塊提供框架的基礎部分,包括控制反轉和依賴註入。BeanFactory是一個複雜的工廠模式的實現。上下文(spring-context)模塊建立在Core和Bean模塊的基礎之上:它提供了一種框架風格來訪問對象,類似於JNDI註冊表。Context模塊繼承了Bean模塊的特點並增加了對國際化、事件傳播、資源載入等的支持。ApplicationContext介面是Context模塊的焦點。spring-context-support支持將第三方庫集成到Spring應用中,例如緩存,JavaMail、模板引擎等。spring-expression模塊為運行時查詢和操作對象提供了強大的表達式語言,它是JSP2.1中的EL語言的擴展,這種語言支持設置和獲取屬性值,屬性賦值,方法調用,訪問數組,邏輯和算術運算符,還支持列表投影、選擇和常見的聚合。

2.面向切麵:Spring的AOP封裝包提供了符合AOP Alliance規範的面向切麵的編程實現,讓你可以定義,例如方法攔截器和切點,從邏輯上講,從而減弱代碼的功能耦合,清晰的被分離開。

3.消息傳送:Spring FrameWork 4包括一個spring-messaging模塊,它是從Spring集成項目的關鍵抽象,如Message, MessageChannel,MessageHandle。該模塊該包含一組註釋映射消息的方法,類似Spring MVC基於註釋的編程模型。

4.數據訪問/集成:這一層包括JDBC、ORM、OXM、JMS和事務模塊。spring-jdbc模塊提供了一個JDBC抽象層從而消除了令人乏味的JDBC編程和解析資料庫提供商特定的錯誤。spring-tx模塊支持類的編程和聲明式事務管理,實現特殊的介面和你的POJO(Plain Old Java Objects)。spring-orm模塊提供了流行的對象-關係映射集成層API,包括JPA、JDO和Hibernate。使用spring-orm模塊可以使這ORM框架結合Spring提供的其他特性,比如前面提到的簡單的聲明式事務管理。spring-oxm模塊提供了一個抽象層,支持對象/XML映射的實現,如JAXB、 Castor、XMLBeans、 JiBX和XStream。

5.網路層:包括spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模塊。spring-web模塊提供基礎的針對web開發的集成特性,包括文件上傳功能、利用Servlet偵聽器進行IOC容器初始化和針對web的應用上下文。它還包括一個HTTP客戶端和Spring的web部件的遠程支持。spring-webmvc模塊包括Spring的MVC模型和REST Web服務實現的web應用程式,Spring的MVC框架提供了一種清晰的分離模型,在領域模型代碼和web form之間,並且還可以藉助Spring框架的其他特性。

6.測試層:spring-test模塊支持單元測試和包含Junit或者TestNG的集成測試,它提供了Spring的ApplicationContext一致性裝載和這些上下文的緩存機制,它還提供了可用於測試代碼隔離的模擬對象。

三、動手創建

概念先講到這,先上手創建項目找找感覺。使用的是idea開發工具。創建項目開始(使用maven構建)

在Groupid中填入項目的包名即可。Artifactid自定義即可,這裡建議與項目名稱一致。版本預設在Groupid中填入項目的包名即可。Artifactid自定義即可,這裡建議與項目名稱一致。版本預設.

另外的是maven相關設置,不懂得同學可以先去學學maven,項目中都是必學的

選擇文件位置

創建完成,項目架構如圖(img與md文件是說明文件,不計其中)

在main下新建文件夾resources用於存放資源文件

在resources上右鍵,選擇mark directory as 選中Resources Root

 

 

添加spring依賴包

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.2.6.RELEASE</version>
    </dependency>

pom.xml的完整配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.yuanqinnan</groupId>
  <artifactId>springLearn</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>springLearn</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.2.6.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
</build>
</project>

在剛纔新建的resources下新建META-INF包,在META-INF下新建applicationContext.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">
</beans>

新建test包和HelloWorld.java,Main.java結構如下:

代碼如下:

public class HelloWorld {

        private String info;

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }
}
public class Main {
    public static void main(String[] args)
    {
        //讀取配置文件
        ApplicationContext ctx=new ClassPathXmlApplicationContext("META-INF/applicationContext.xml");
        //獲取bean的實例
        HelloWorld t=(HelloWorld) ctx.getBean("hello");
        //調用方法
        System.out.println(t.getInfo());
    }
}

在applicationContext.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 id="hello" class="com.yuanqinnan.test.HelloWorld">
        <property name="info" value="Hello,This is my first Spring Application!"></property>
    </bean>
</beans>

右鍵運行Main

得到結果:

如此,一個spring項目便創建成功,後面再繼續學習spring的其他知識

源碼地址:https://gitee.com/yuanqinnan/spring

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前一陣子剛整理完RocketMQ4.3.x版本的相關配置的工作,接下來就來測試一下改變參數會帶來什麼好的結果 首先我就選中了useEpollNativeSelector 這個參數 預設這個參數是 false 這個參數的意思就是是否啟用Epoll IO模型。Linux環境建議開啟 然後我就打開了這個參 ...
  • 一、引言 生活中有很多模板,如:簡歷模板、論文模板,PPT模板,所謂模板就是有一個特定的格式,但是可以根據自身的需求進行改動,然後實現自己的功能。這樣的好處就是可以減少自身的工作量,想想網上那麼多好的PPT模板,改吧改吧就成自己的,這是一件多酸爽的事情! 二、例子入手 現在有兩個類,分別是泡茶和泡咖 ...
  • 一直想寫關於產品設計思路或者說方案策略性的文章,一直都不好下筆,因為產品設計是一個很大很空佷泛話題,而且每個人都有自己的一套思路。基於以上情況本文只是總結個人的一套思路,供大家參考。 1.以人為本的黃金設計定律 任何產品的設計都是基於目標用戶的需求而設計,其目的是為用戶解決需求的同時並提供更高的價值 ...
  • 一、引言 電商項目中一個常見場景:提交訂單操作,提交訂單後有很多後續動作,例如:檢查訂單, 創建訂單, 減庫存,創建支付鏈接等等,這些子類的內部操作都很複雜。如果我們的客戶端程式要直接跟這些內容子系統進行耦合,那麼客戶端就得隨著子系統的改動而改動。提交訂單操作在一個電商系統中很多地方都會出現,如果每 ...
  • 以下為DI控制反轉個人理解煩請各位大牛指教~ 編寫程式時我們應當遵循抵耦合高內聚的原則(各個功能模塊互不依賴). 我們可以利用面向對象裡面介面的特性來進行DI控制反轉,讓功能模塊全部依賴介面,而不依賴具體的實現類,當程式跑起來以後通過註入的方式註入具體的實現類如以下代碼: 這樣,購物車類就實現了松耦 ...
  • 內容過程,把做工程過程較好的內容片段備份一次,如下的內容是關於 JavaBean到JSon格式的轉換例子的內容,應該對各朋友有一些用處。 User u = new User(); u.setId(1); u.setName("lizhi"); u.setAge(24); u.setHeigh("17 ...
  • 本篇主要介紹的是SpringCloud中的服務消費者(Feign)和負載均衡(Ribbon)功能的實現以及使用Feign結合Ribbon實現負載均衡。 ...
  • 1、習題 4: 更多的變數和列印 學習目標: 瞭解用戶輸入方法,明白pthon2和Python3之間的用戶輸入的區別。瞭解格式化字元串(format string)的概念,學會如何創建包含變數內容的字元串。使用專門的格式和語法把變數的內容放到字元串里,然後進行格式化的列印輸出。 1.1、用戶輸入 在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...