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