摘要:基于工廠,會有多種應用上下文的實現的模塊在模塊中,面向切面編程提供了豐富的支持,該模塊是應用系統中開發切面的基礎,可以幫助應用對象解耦。的主頁安全對于許多應用都是一個非常關鍵的切面。
簡化Java開發
JavaBean:Enterprise JavaBean、EJB
JDO:Java數據對象、Java Data Object
POJO:Plain Old Java Object
DI:依賴注入、Dependency Injection、DI
AOP:面向切面編程、Aspect-Orientied Programming
為了降低Java開發的復雜性,Spring采取了以下4種關鍵策略:
基于POJO的輕量級和最小侵入性編程
通過依賴注入和面向接口實現松耦合
基于切面和慣例進行聲明式編程
通過切面和模板減少樣板式代碼
依賴注入 DI功能是如何實現的依賴注入會將所依賴的關系自動交給目標對象,而不是讓對象自己去獲取依賴
DI的最大收益——松耦合。如果一個對象只通過接口(而不是具體實現或初始化過程)來表明依賴關系,那么這種依賴關系就能夠在對象本身毫不知情的情況下,用不同的具體實現進行替換
對依賴進行替換的一個最常用方法就是測試的時候使用mock實現
裝配wiring創建應用組件之間協作的行為通常稱為裝配(wiring)。Spring有多種裝配bean的方式,采用XML是很常見的一種裝配方式
觀察它如何工作Spring通過應用上下文(Application Context)裝載bean的定義并把它們組裝起來。Spring應用上下文全權負責對象的創建和組裝。Spring自帶了多種應用上下文的實現,它們之間主要的區別僅僅在于如何加載配置
應用切面DI能夠讓相互協作的軟件組件保持松散耦合,而面向切面編程允許你把遍布應用各處的功能分離出來形成可重用的組件
AOP能夠使系統及服務模塊化,并以聲明的方式將它們應用到它們需要影響的組件中去。這些組件會具有更高的內聚性并且會更加關注自身的業務,完全不需要了解涉及系統服務所帶來復雜性。總之,AOP能夠確保POJO的簡單性
使用模板消除樣板式代碼Spring旨在通過模板封裝來消除樣板式代碼。Spring的JdbcTemplate使得執行數據庫操作時,避免傳統的JDBC樣板代碼成為了可能。僅僅需要關注于獲取員工數據的核心邏輯,不需要迎合JDBC API需求
容納你的Bean在基于Spring的應用中,應用對象生存于Spring容器(container)中。Spring容器負責創建對象,裝配它們,配置它們并管理它們的整個生命周期,從生存到死亡
Spring自帶多個容器實現,可以歸為兩種不同的類型:
bean工廠(由org.springframework.beans.factory.BeanFactory接口定義)是最簡單的容器,提供基本的DI支持。(對于大多數應用來講bean工廠顯得太低級)
應用上下文(由org.springframework.context.ApplicationContext接口定義)基于BeanFactory構建,并提供應用框架級別的服務,例如從屬性文件解析文本信息以及發布應用事件給感興趣的事件監聽者
使用應用上下文AnnotationConfigApplicationContext: 從一個或多個基于Java的配置類中加載Spring應用上下文
AnnotationConfigWebApplicationContext:從一個或多個基于Java的配置類中加載SpringWeb的應用上下文
ClassPathXmlApplicationContext:從類路徑下的一或多個XML配置文件中加載上下文定義, 并把應用上下文的定義文件作為類資源
FileSystemXmlApplicationContext: 從文件系統下的一個或多個XML配置文件中加載上下文定義
XmlWebApplicationContext:從web應用下的一個或多個XML配置文件中加載上下文定義
加載一個FileSystemXmlApplicationContext:
ApplicationContext context = new FileSystemXmlApplicationContext("c:/knight.xml");
使用ClassPathXmlApplicationContext從應用的類路徑下加載應用上下文:
ApplicationContext context = new ClassPathXmlApplicationContext("knight.xml");
使用AnnotationConfigApplicationContext從Java配置中加載應用上下文:
ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig,class);
Spring對bean進行實例化
Spring將值和bean的引用注入到bean對應的屬性中
如果bean實現了org.springframework.beans.BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法
如果bean實現org.springframework.beans.factory.BeanFactoryAware接口,Spring將調用setBeanFactory()方法,將BeanFactory容器實例傳入
如果bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用上下文的引用傳入進來
如果bean實現了BeanPostProcessor接口,Spring將調用postProcessBeforeInitialization()方法
如果bean實現了InitializingBean接口,Spring將調用afterPropertiesSet()方法。類似地,如果bean使用init-method聲明了初始化方法,該方法也會被調用
如果bean實現了BeanPostProcessor接口,Spring將調用postProcessAfterInitialization()方法
此時,bean已經準備就緒,可以被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷毀
如果bean實現了DisposableBean接口,Spring將調用distroy()接口方法。同樣,如果bean使用destroy-method聲明了銷毀方法,該方法也會被調用
俯瞰Spring風景線 Spring模塊 Spring核心容器容器是Spring框架最核心的部分,管理著Spring應用中bean的創建、配置和管理。在該模塊中,包括了Spring bean工廠,為Spring提供DI功能。基于bean工廠,會有多種Spring應用上下文的實現
Spring的AOP模塊在AOP模塊中,Spring面向切面編程提供了豐富的支持,該模塊是Spring應用系統中開發切面的基礎,可以幫助應用對象解耦。借助于AOP,可以將遍布系統的關注點(事務和安全)從它們所應用的對象中解耦出來
數據訪問與集成Spring的JDBC和DAO(Data Access Object)模塊抽象了JDBC編寫的樣板代碼
ORM(Oboject-Relational Mapping)模塊建立在對DAO的支持之上,并為多個ORM框架提供了一種構建DAO的簡便方式。對許多留學的ORM框架進行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事務管理支持所有的ORM框架以及JDBC
本模塊還包括JMS(Java Message Service)之上構建的Spring抽象層,它會使用消息以異步的方式與其他應用集成;包含對象到XML映射的特性;使用Spring AOP模塊為Spring應用中的對象提供事務管理服務
Web與遠程調用MVC(Model-View-Controller)模式是一種普遍被接受的構建Web應用的方法,幫助用戶將界面邏輯與應用邏輯分離
Spring遠程調用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同時Spring還自帶了一個遠程調用框架:HTTP invoker。Spring還提供了暴露和使用REST API的良好支持
InstrumentationSpring的Instrumentation模塊提供了為JVM添加代理(agent)的功能。具體來講,它為Tomcat提供了一個織入代理,能夠為Tomcat傳遞類文件,就像這些文件是被類加載器加載的一樣
測試Spring為使用JNDI(Java Naming and Directory Interface,Java命名和目錄接口)、Servlet(Server Applet)和Portlet編寫單元測試提供了一系列的mock對象實現。對于集成測試,該模塊為加載
Spring應用上下文中的bean集合以及與Spring上下文中的bean進行交互提供了支持
Spring Portfolio包括多個構建于核心Spring框架之上的框架和類庫。整個Spring Portfolio幾乎為每一個領域的Java開發都提供了Spring編程模型
Spring Web FlowSpring Web Flow建立于Spring MVC框架之上,它為基于流程的會話式Web應用(購物車或者向導功能)提供了支持。Spring Web Flow的主頁(http://projects.spring.io/spr...)
Spring Web Service雖然核心的Spring框架提供了將Spring bean以聲明的方式發布為Web Service的功能,但是這些服務是基于一個具有爭議性的架構(拙劣的契約后置模型)之上而構建的。這些服務的契約由bean的接口來決定。Spring Web Service提供了契約優先的Web Service模型,服務的實現都是為了滿足服務的契約而編寫的。
Spring Web Service的主頁(http://docs.spring.io/spring-...)
安全對于許多應用都是一個非常關鍵的切面。利用Spring AOP,Spring Security為Spring應用提供了聲明式的安全機制。Spring Security的主頁(http://projects.spring.io/spr...)
Spring Integration許多企業級應用都需要與其他應用進行交互。Spring Integration提供了多種通用應用集成模式的Spring聲明式風格實現。Spring Integration的主頁(http://projects.spring.io/spr...)
Spring Batch當我們需要對數據進行大量操作時,沒有任何技術可以比批處理更勝任這種場景。如果需要開發一個批處理應用,可以通過SpringBatch,使用Spring強大的面向POJO的編程模型。
Spring Batch的主頁(http://projects.spring.io/spr...)
Spring Data使得在Spring中使用任何數據庫都變得非常容易。NoSQL數據庫提供了使用數據的新方法,這些方法會比傳統的關系型數據庫更為合適。不管你使用文檔數據庫,如MongoDB,圖數據庫,如Neo4j,還是傳統的關系型數據庫,Spring Data都為持久化提供了一種簡單的編程模型。
這包括為多種數據庫類型提供了一種自動化的Repository機制,它負責為你創建Repository的實現
Spring SocialSpring的一個社交網絡擴展模塊。Spring Social更多的是關注連接(connect),而不是社交(social)。
它能夠幫助你通過REST API連接Spring應用,其中有些Spring應用可能原本并沒有任何社交方面的功能目標。
https://spring.io/guides/gs/a...
https://spring.io/guides/gs/a...
Spring Mobile是Spring MVC新的擴展模塊,用于支持移動Web應用開發
Spring for Android通過Spring框架為開發基于Android設備的本地應用提供某些簡單的支持。它還能與Spring Social協作,使得原生應用可以通過REST API進行社交網絡的連接。Spring for Android的主頁(http://projects.spring.io/spr...)
Spring BootSpring Boot以Spring的視角,致力于簡化Spring本身。Spring Boot大量依賴于自動配置技術,它能夠消除大部分(在很多場景中,甚至是全部)Spring配置。還提供了多個Starter項目,不管你使用Maven還是Gradle,這都能減少Spring工程構建文件的大小
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67299.html
摘要:作為微服務的基礎設施之一,背靠強大的生態社區,支撐技術體系。微服務實踐為系列講座,專題直播節,時長高達小時,包括目前最流行技術,深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業人員拋磚引玉。 簡介 目前業界最流行的微服務架構正在或者已被各種規模的互聯網公司廣泛接受和認可,業已成為互聯網開發人員必備技術。無論是互聯網、云計算還是大數據,Java平臺已成為全棧的生態體系,...
摘要:如何降低開發的復雜性最小侵入編程通過面向接口和依賴注入實現松耦合基于編程慣例和切面進行聲明式編程通過模板減少樣板式代碼容器在應用中,不再由對象自行創建或管理它們之間的依賴關系容器負責創建對象裝配對象配置它們并管理它們的整個生命周期。 歡迎大家關注我的微信公眾號,一起探討Java相關技術 showImg(https://segmentfault.com/img/bVboaBO?w=129...
摘要:僅依賴全家桶,無第三方依賴。碼云微服務開發核心包,由于功能眾多不做詳細描述,大家可以看組件圖譜。碼云對相關組件進行的擴展,暫未開源,敬請期待組件圖譜 mica 云母,寓意為云服務的核心,使得云服務開發更加方便快捷。mica 的前身是 lutool,lutool 在內部孵化了小兩年,已經被多個朋友運用到企業。由于 lutool 對微服務不夠友好,故重塑了mica。 mica 核心依賴 m...
摘要:下一代服務端開發下一代服務端開發第部門快速開始第章快速開始環境準備,,快速上手實現一個第章企業級服務開發從到語言的缺點發展歷程的缺點為什么是產生的背景解決了哪些問題為什么是的發展歷程容器的配置地獄是什么從到下一代企業級服務開發在移動開發領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》 Kotlin + Spring Boot : 下一代 Java...
閱讀 2188·2021-11-24 09:38
閱讀 3248·2021-11-08 13:27
閱讀 3091·2021-09-10 10:51
閱讀 3159·2019-08-29 12:20
閱讀 671·2019-08-28 18:28
閱讀 3467·2019-08-26 11:53
閱讀 2714·2019-08-26 11:46
閱讀 1525·2019-08-26 10:56