1. 程式人生 > >Spring學習(一)概述

Spring學習(一)概述

Spring框架優勢/為什麼要用Spring/Spring簡介

架構概述(對各種開發的支援):


Spring總結起來優點如下:

低侵入式設計,程式碼的汙染極低。

獨立於各種應用伺服器,基於Spring框架的應用,可以真正實現Write Once,Run Anywhere的承諾。

Spring的IoC容器降低了業務物件替換的複雜性,提高了元件之間的解耦。

Spring的AOP支援允許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用。

Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的資料庫訪問。

Spring的高度開放性,並不強制應用完全依賴於Spring,開發者可自由選用Spring框架的部分或全部。

Spring的核心機制

管理Bean

程式主要是通過Spring容器來訪問容器中的Bean,ApplicationContext是Spring容器最常用的介面,該介面有如下兩個實現類:

ClassPathXmlApplicationContext: 從類載入路徑下搜尋配置檔案,並根據配置檔案來建立Spring容器。

FileSystemXmlApplicationContext: 從檔案系統的相對路徑或絕對路徑下去搜索配置檔案,並根據配置檔案來建立Spring容器。

public class BeanTest{
    public static void main(String args[]) throws Exception{
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        Person p = ctx.getBean("person", Person.class);
        p.say();
    }
}

依賴注入

Spring框架的核心功能有兩個:

Spring容器作為超級大工廠,負責建立、管理所有的Java物件,這些Java物件被稱為Bean。

Spring容器管理容器中Bean之間的依賴關係,Spring使用一種被稱為"依賴注入"的方式來管理Bean之間的依賴關係。

依賴注入,不僅可以為Bean注入普通的屬性值,還可以注入其他Bean的引用。依賴注入是一種優秀的解耦方式,其可以讓Bean以配置檔案組織在一起,而不是以硬編碼的方式耦合在一起。

控制反轉(Inverse of Control,IoC)/依賴注入(Dependency Injection),因此不管是依賴注入,還是控制反轉,其含義完全相同。當某個Java物件(呼叫者)需要呼叫另一個Java物件(被依賴物件)的方法時,在傳統模式下通常有兩種做法:

  1. 原始做法: 呼叫者主動建立被依賴物件,然後再呼叫被依賴物件的方法。
  2. 簡單工廠模式: 呼叫者先找到被依賴物件的工廠,然後主動通過工廠去獲取被依賴物件,最後再呼叫被依賴物件的方法。

注意上面的主動二字,這必然會導致呼叫者與被依賴物件實現類的硬編碼耦合,非常不利於專案升級的維護。使用Spring框架之後,呼叫者無需主動獲取被依賴物件,呼叫者只要被動接受Spring容器為呼叫者的成員變數賦值即可,由此可見,使用Spring後,呼叫者獲取被依賴物件的方式由原來的主動獲取,變成了被動接受——所以稱之為控制反轉。

另外從Spring容器的角度來看,Spring容器負責將被依賴物件賦值給呼叫者的成員變數——相當於為呼叫者注入它依賴的例項,因此稱之為依賴注入。


Spring的AOP

為什麼需要AOP

AOP(Aspect Orient Programming)也就是面向切面程式設計,作為面向物件程式設計的一種補充,已經成為一種比較成熟的程式設計方式。其實AOP問世的時間並不太長,AOP和OOP互為補充,面向切面程式設計將程式執行過程分解成各個切面。

AOP專門用於處理系統中分佈於各個模組(不同方法)中的交叉關注點的問題,在JavaEE應用中,常常通過AOP來處理一些具有橫切性質的系統級服務,如事務管理、安全檢查、快取、物件池管理等,AOP已經成為一種非常常用的解決方案。

使用AspectJ實現AOP

AspectJ是一個基於Java語言的AOP框架,提供了強大的AOP功能,其他很多AOP框架都借鑑或採納其中的一些思想。其主要包括兩個部分:一個部分定義瞭如何表達、定義AOP程式設計中的語法規範,通過這套語法規範,可以方便地用AOP來解決Java語言中存在的交叉關注點的問題;另一個部分是工具部分,包括編譯、除錯工具等。

AOP實現可分為兩類:

  1. 靜態AOP實現: AOP框架在編譯階段對程式進行修改,即實現對目標類的增強,生成靜態的AOP代理類,以AspectJ為代表。
  2. 動態AOP實現: AOP框架在執行階段動態生成AOP代理,以實現對目標物件的增強,以Spring AOP為代表。

一般來說,靜態AOP實現具有較好的效能,但需要使用特殊的編譯器。動態AOP實現是純Java實現,因此無須特殊的編譯器,但是通常效能略差。


相關推薦

Spring學習概述

Spring框架優勢/為什麼要用Spring/Spring簡介 架構概述(對各種開發的支援): Spring總結起來優點如下: 低侵入式設計,程式碼的汙染極低。 獨立於各種應用伺服器,基於Spring框架的應用,可以真正實現Write Once,Run Anywhere

設計模式學習-概述

項目 site 相對 實體 pattern 需要 gre 維護 pri 設計模式(Design Patterns) ——可復用面向對象軟件的基礎 設計模式(Design pattern)是一套被反復使用、多

spring學習helloworld編寫總結

cati 流程 spring學習 一個 1-1 png cat 其中 XML 配置Bean: 配置bean的方式:1.基於xml文件的方式 2.基於註解的方式。 Bean的配置方式;1.通過全類名(反射)2.通過工廠方法 IOC容器:ApplicationContext和

spring-學習

相關 細節 mvc 客戶端和服務器 web應用 利用 例如 常見 註入 概述 Spring 是最受歡迎的企業級 Java 應用程序開發框架。主要用來在java EE平臺上開發web應用。 好處 spring可以使開發人員使用pojos開發企業級的應用程序。 spring是有

verilog學習概述

PS:本系列參考夏宇聞老師的Verilog數字系統設計jiao教程,意在對verilog形成基礎的體系,留作將來查詢參考,請大家多指教。    硬體描述語言(HDL,hardware description language)是一種形式化方法來描述數位電路和系統的語言。數

概率圖模型學習概述

本文內容根據Stanford 教授 Daphne Koller 的公開課 Probabilistic Graphical Model內容整理。 1.什麼是概率圖模型 概率圖模型即為解決某一類應用問題的一個框架。在理解這個概念之前,首先來看兩個例子: 1) 上面這張圖片

spring學習spring簡介

Spring簡介:   Spring 框架是 Java 應用最廣的框架,它的成功來源於理念,而不是技術本身,它的理念包括 IoC (Inversion of Control,控制反轉) 和 AOP(Aspect Oriented Programming,面向切面程式設計)。

spring學習屬性管理PropertySource類

一、PropertySource:用於存放key-value物件的抽象,子類需要實現getProperty(String name)返回對應的Value方法,其中value可以是任何型別不侷限在字串 注:PropertySource裡的屬性name和source都是fin

Python教程:進擊機器學習--概述

開啟Python科學之旅 本章介紹了Python在機器學習中常用的庫和工具,包括數學計算和繪圖。 Python資料科學生態 為什麼選擇Python? 先獻上IEEE Spectrum Magazine 2017 程式設計排行圖一張

Spring學習—入門

Spring是什麼? Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson建立。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。 strut

Spring學習-Spring入門示例

從本篇部落格開始,後續將重點學習Spring,並記錄學習過程中的點點滴滴。 開發環境:jdk 1.7,Eclipse Mars, Spring Framwork 4.3.0 1、 在Eclipse中

Spring 學習-----裝配Bean

#裝配Bean ![image](裝配Bean.png) ### 一 自動裝配Bean ####1) 用@[email protected]+Spring 配置類名(指定 Spring 配置資訊的來源) <p>Printer.class <pre

Spring學習--Spring的設計與整體架構

整合 prototype 數據庫操作 方案 obi 難度 struts框架 lin 設計 之前只是在學校裏大概的學習了一下Spring框架的使用以及一些最基本、淺顯的原理,並沒有做出深入的學習,等到工作之後想提升自己的時候發現所掌握的Spring框架的簡直爛如狗屎,為監督自

spring學習

col gin 初始化 自動 message 方式 調度 加載 統一 spring結構圖 一、核心容器(core container):核心容器由spring-core,spring-beans,spring-context,spring-context-suppor

spring之註解概述

dsm 的人 src article service 優缺點 中一 auto 數據 Spring的核心是依賴註入(DI),而依賴註入的基礎是依賴信息的配置。這些配置稱之為元數據。在之前的的學習中。一直採用的是基於xml的配置,這些元數據配置在spring內部被註冊成為B

Spring 源碼學習

pla 註入 websocket web前端 tex 異常 messaging ping 完整 設計伊始 Spring 是為解決企業級應用開發的復雜性而設計,她可以做很多事。但歸根到底支撐Spring的僅僅是少許的基本理念,而所有地這些的基本理念都能可以追溯到一個

Java學習基礎概述

java 所在 應用 enter 代碼實現 ase 產品 stand 就是 寫代碼: 1,明確需求。我要做什麽? 2,分析思路。我要怎麽做?1,2,3。 3,確定步驟。每一個思路部分用到哪些語句,方法,和對象。 4,代碼實現。用具體的java語言代碼把思路體現出來。 學

我們一起學習SpringSpring簡介

邏輯 style 發的 nfa 不同的 構建 john 局限 認識   首先聲明,我是一個spring初學者,寫這篇blog的目的是為了能和大家交流。文中不當之處還望大佬指出,不勝感激!   好了,現在我們開始進入正題。   很多小夥伴在學習Java的時候都會有人建議你去學

Spring-Boot學習

圖片 public ram turn tps bind 實現 file clas 入門實例 - HelloWorld File > New > Spring Starter Project 項目創建完成: 這樣就完成了項目的創建,下面我們

源碼學習——模擬Spring MVC

webapp lan conf 依賴 xtend .com inf pre 執行 1.準備 1.1創建項maven項目,目錄如下 1.2 導包 servlet-api: 模擬springmvc采用的是對同一個servlet進行處理 fastjson: JSONObject