1. 程式人生 > >spring(1)Spring之旅

spring(1)Spring之旅

【0】README 0.1)本文部分文字描述轉自:“Spring In Action(中/英文版),旨在reviewSpring(1)Spring之旅 的相關知識; 【1】簡化java 開發 1)為了降低java開發的複雜性,Spring採取了以下4種關鍵策略(strategy):
s1)基於POJO的輕量級和最小侵入性程式設計;(POJO == plain ordinary java object,簡單java物件 == 普通javabean) s2)通過依賴注入和麵向介面實現鬆耦合; s3)基於切面和慣例進行宣告式程式設計; s4)通過切面和模板減少樣板式程式碼;
【1.2】依賴注入(Dependency Injection==DI)
1)耦合具有兩面性:
1.1)一方面:緊密耦合的程式碼難以測試,難以複用,難以理解,並且典型地表現出打地鼠式的bug特性(修復一個bug,將會出現一個或更多新的bug);(乾貨——新貴詞彙——打地鼠式的bug特性 1.2)另一方面:一定程度的耦合又是必須的——完全沒有耦合的程式碼什麼都做不了;(總而言之,耦合是必須的,但應該被小心謹慎地管理);
2)通過DI,物件的依賴關係將由系統中負責協調各物件的第三方元件在建立物件的時候進行設定;
3)這就是DI所帶來的最大收益——鬆耦合。如果一個物件只通過介面(而不是具體實現或初始化過程)來表明依賴關係,那麼這種依賴就能夠在物件本身毫不知情的case下,用不同的具體實現進行替換;(乾貨——DI所帶來的最大收益——鬆耦合)
4)建立應用元件之間協作的行為通常稱為裝配:Spring有多種裝配bean 的方式,採用XML 是很常見的一種裝配方式,也可以使用 java 來描述配置;(乾貨——裝配的定義) 5)Spring通過應用上下文裝置bean的定義並把他們組裝起來。Spring應用上下文全權負責物件的建立和組裝。Spring自帶了多種應用上下文的實現,它們之間的主要區別僅僅在於 如何載入配置; 【1.3】應用切面 1)DI 能夠讓相互協作的軟體元件保持鬆散耦合,而面向切面程式設計(AOP)允許你把遍佈應用各處的功能分離出來形成可重用的元件;(乾貨——面向切面程式設計的定義) 2)面向切面程式設計往往被定義:為促使軟體系統實現關注點的分離一項技術。系統由許多不同的元件組成,每一個元件各負責一塊特定功能。除了實現自身核心的功能之外,這些元件還經常承擔額外的職責。諸如日誌,事務管理和安全這樣的系統服務經常融入到自身具有核心業務邏輯的元件中去,這些系統服務通常被稱為橫切關注點
,因為他們會跨越系統的多個元件;(乾貨——橫切關注點的定義)
3)AOP能夠使這些服務模組化,並以宣告的方式將它們應用到他們需要影響的元件中去。所造成的結果就是這些元件會具有更高的內聚性並且會更加關注自身的業務,完全不需要了解涉及系統服務所帶來複雜性。總之,AOP 能夠確保POJO的簡單性; 4)看個荔枝:(本小姐末有輔助圖說明) 4.0)相關原始碼
public class KnightMain {
 public static void main(String[] args) throws Exception {
  String dir = System.getProperty("user.dir") + File.separator + "META-INF" + File.separator;
   
  FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(dir+"knight.xml");
  Knight knight = context.getBean(Knight.class);
  knight.embarkOnQuest();
  context.close();
 }
}
對以上程式碼的分析(Analysis):
A1)使用FileSystemXmlApplicationContext  和 使用 ClassPathXmlApplicaitonContext的區別在於:FileSystemXmlApplicationContext 在指定的檔案系統路徑下查詢 knight.xml 檔案,而 ClassPathXmlApplicationContext 是所有的類路徑(包含 JAR檔案)下查詢knight.xml 檔案; A2)如果你想從java 配置中載入應用上下文,那麼可以使用 AnnotationConfigApplicationContext:
ApplicationContext context = new AnnotationConfigApplicationContext(com.spring.chapter1.KnightConfig.class);
4.1)console info:
五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
資訊: Refreshing org.[email protected]179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy
五月 26, 2016 4:37:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from file [E:\bench-cluster\cloud-data-preprocess\SpringInAction4\META-INF\knight.xml]
before: Fa la la, the knight is so brave! // higglight line.
Embarking on quest to slay the dragon! // highlight line.
after: Tee hee hee, the brave knight did embark on a quest! // highlight lien.
五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext doClose
資訊: Closing org.[email protected]179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy
4.2)本文還是習慣上給出以上測試用例的呼叫過程
【2】容納你的bean 1)intro to Spring容器:在基於spring的應用中,你的應用物件生存於Spring容器中;(乾貨——Spring容器的作用——Spring容器負責建立應用程式中的bean並通過DI 來協調這些物件之間的關係) 2)spring容器並不是只有一個。Spring自帶了多個容器實現,可以歸為兩種不同的型別:
type1)bean工廠(org.springframework.beans.factory.eanFactory.context.ApplicationContext介面定義)是最簡單的 容器,提供基本的DI支援; type2)應用上下文(由 org.springframework.context.ApplicationContext介面定義)基於BeanFactory構建,並提供應用框架級別的訪問;
3)推薦使用應用上下文,因為bean工廠對大多數應用來說太low了; 【2.1】使用應用上下文 1)Spring自帶了多種型別的應用上下文,下面羅列了幾個最可能遇到的;
case1)AnnotationConfigApplicationContext:從一個或多個基於java 的配置類中載入Spring應用上下文; case2)AnnotationConifgWebApplicationContext:從一個或多個基於java 的配置類中載入Spring Web應用上下文; case3)ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置檔案中載入上下文定義,把應用上下文的定義檔案作為類資源; case4)FileSystemXmlApplicationContext:從檔案系統下的一個或多個XML配置檔案中載入上下文定義; case5)XmlWebApplicationContext:從web 應用下的一個或多個XML 配置檔案中載入上下文定義;
Attention)使用FileSystemXmlApplicationContext  和 使用 ClassPathXmlApplicaitonContext的區別在於:(這裡再次提供了它們的區別)FileSystemXmlApplicationContext 在指定的檔案系統路徑下查詢 knight.xml 檔案,而 ClassPathXmlApplicationContext 是所有的類路徑(包含 JAR檔案)下查詢knight.xml 檔案; 【3】Spring模組 1)intro:在Spring4.0中, Spring框架的釋出版本包括了20個不同的模組,每個模組會有3個JAR檔案(二進位制類庫,原始碼jar,以及javadoc的jar);

相關推薦

spring(1)Spring

【0】README 0.1)本文部分文字描述轉自:“Spring In Action(中/英文版)”,旨在reviewSpring(1)Spring之旅 的相關知識; 【1】簡化java 開發 1)

Spring Cloud探索(二)——Spring Cloud Eureka

2.1 什麼是服務註冊與發現 在服務治理框架中,通常都會構建一個註冊中心,每個服務單元向註冊中心登記自己提供的服務,包括服務的主機與埠號、服務版本號、通訊協議等一些附加資訊。註冊中心按照服務名分類組織服務清單,同時還需要以心跳檢測的方式去監測清單中的服務是否可用,若不可用需要從服務清單中剔除,以

Spring Boot 探索(一)——Spring Boot 簡介

一、什麼是Spring Boot 隨著技術日新月異的發展,如今的軟體設計已不想曾經那般單一。業務複雜,功能繁瑣,大量三方元件的相互整合,成為了開發的一大難題。幸而,Spring Boot如同一道曙光,為我們java開發者帶來了福音,讓我們擺脫專案構架時各種配置的鬧心,得以專

Spring Boot 探索(五)——Web支援

一、Spring MVC配置 /** * 主要WebMvc配置 * @author sunyiran * @date 2018-09-29 */ @Configuration public class WebMvcConfig extends WebMvcConfi

Spring Boot學習:(四)springboot 整合 fastjson

springboot 預設使用的 jackson 但是聽說某寶的fastjson 效能很好,而且平時用的習慣,所以來整合一下。 首先在pom 中匯入依賴 <dependency> <groupId>

Spring boot 學習--載入靜態資原始檔

介面寫久了感覺Jquery忘光了,在網上蕩了一個帶頁面的專案,根據要求搭建好spring boot+thymeleaf配置,js 、css放到static資料夾下,啟動專案發現樣式不顯示,查閱資料boot專案是預設載入static下的靜態資源,在頁面'ctr'下也能進去,好鬱

Spring Boot 學習

1. Spring Boot預設讀取的application.properties有點坑,並沒有主動去掉每一行後邊的空格,如 encoding.spring.thymeleaf.encoding=UTF-8 就識別成了UTF-8+空格,所以導致查詢編碼格式

【 專欄 】- Spring 核心技術

Spring 核心技術之旅 詳細介紹 Spring Boot、IoC 容器、如何裝配 Bean、Spring AOP、SpEL 動態語言、支援的持久化技術、事務管理、Spring JDBC、整合 ORM 框架、Spring

Spring Security————————————基本介紹安裝(1

首先建立一個maven專案 並建立一個子模組 然後父模組pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs

SpringBoot -- 定時任務兩種(Spring Schedule 與 Quartz 整合 )實現

目的 config object cnblogs java title cor 進行 eat 相關文章 Spring Boot 相關文章目錄 前言 最近在項目中使用到定時任務,之前一直都是使用Quartz 來實現,最近看Spring 基礎發現其實Spring 提供

Spring學習(四)Spring工作原理再探

容器 mxml 實現 span ssp express 16px 部分 做了 上篇博文對Spring的工作原理做了個大概的介紹,想看的同學請出門左轉。今天詳細說幾點。 (一)Spring IoC容器及其實例化與使用 Spring IoC容器負責Bean的實例化、配置和組裝工

2018-03-27 Spring

代碼 一個 更多 不同的 不同 環境 松耦合 總結 ron 最近一直陷入一個誤區,老是找一些網上關於SSM速成等視頻學習,然後盲目的跟著‘復制‘代碼,當時跟著視頻敲完代碼,實現了某些功能後,感覺自己對Spring等一些框架已經有了足夠的了解(其實只是知其然,不知其所以然

2018-03-29 Spring

應用 反射機制 相互 tro 負責 ssa 面向切面編程 str 集成 不積跬步,無以至千裏;不積小流,無以成江海。                      -- 荀子   1.Spring容器   在基於Spring的應用中,應用對象生存於Spring容器中。

1.spring系列簡要概述

esc 不依賴 切面 可能 tro 接受 校驗和 javabean 異常處理 一、什麽是Spring? 1.spring是一個開源框架,它是為簡化企業級應用開發而生,它是一個IOC或者稱之為DI和AOP容器框架。 2.Spring解決的是業務邏輯層和其他各層的松耦合問題,

dotNet程序員的Java爬坑(三)spring MVC篇一

www. let ref ide filter ESS pro enc require 使用maven構建springMVC項目,開發工具為IDEA 一、構建Maven項目,模板為WebApp 二、在pom文件中配置SpringMvc配置(springMvc需要以來serv

開啟Spring Boot

document sse 項目 場景 resource 大型 start.s 什麽是 ron 開啟Spring Boot 之旅 1、Spring Boot 簡介 簡化Spring應用開發的一個框架; 整個Spring技術棧的一個大整合; JavaEE開發的一站式解決方案。

讀書筆記 Spring In Action 4th 第一章 Spring

裝配 遍布 模塊化 處的 nfa cati const mar 驗證 第一章的主要內容介紹 Spring的bean容器 介紹Spring的核心模塊 更為強大的Spring生態系統 Spring的新功能 Tips: POJO的內在含義是指那些沒有從任何類繼承、也沒有

Spring-CloudEureka排坑

1 快速demo 1.0 環境說明   Intelli IDEA+Spring Boot 1.1 新建工程chap52(通過New Project->Spring Initializer->web) 修改pom檔案: <groupId>com.chen4du</grou

Spring Security————————————restful風格介面簡述,過濾器配置(2)

restful介面的完成度簡介 , 分為四級 利用三種方式攔截介面請求  Filter package com.sola.filter; import java.io.IOException; import javax.servlet.Filter; im

Spring(2) (2.1 Spring AOP 開發)

在Spring AOP程式設計中: 如果加入容器中的目標物件有實現介面,用 JDK代理; 如果目標物件沒有實現介面,用 Cglib代理; 手動實現 AOP程式設計: AOP面向切面程式設計: AOP業務程式碼與關注點程式碼分離; 關注點: 重複的程式碼(方法)叫關注點; 切面: