轉:14時就用spring 4, 18年springboot 2.0
Spring1.0 2004年3月24 包含IoC,AOP,XML配置 參考https://spring.io/blog/2004/03/24/spring-framework-1-0-final-released Spring 2.0 2006年10月3 參考https://spring.io/blog/2006/10/03/spring-2-0-final-released Spring 2.5 2007年11月19 支持注解,減少了xml配置 參考https://spring.io/blog/2007/11/19/spring-framework-2-5-released Spring 3.0 2009年12月16 完全利用了Java5中的改進,並為 JEE6 提供了支持。支持Java配置 參考https://spring.io/blog/2009/12/16/spring-3-0-0-is-now-available Spring 4.0 2013年11月1 完全支持 JAVA8 參考https://spring.io/blog/2013/11/01/spring-framework-4-0-rc1-available Spring 5.0 2017年9月28 參考https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga What's New in Version 5.0 JDK 8+ and Java EE 7+ Baseline(JDK8和Java EE7為基礎。兼容JDK9和Java EE8) Removed Packages, Classes and Methods(移除部分包,類和方法) General Core Revision(核心版本的升級) Core Container(核心容器升級,支持@Nullable注解) Spring WebFlux(響應式編程) Kotlin support(支持Kotlin) Testing Improvements(支持Junit5) SpringBoot 1.0 2014年1月22 參考https://spring.io/blog/2014/01/22/spring-boot-1-0-0-rc1-released SpringCloud 1.0 2015年3月14 參考https://spring.io/blog/2015/03/04/spring-cloud-1-0-0-available-now SpringBoot 1.2.5 2015年7月2 參考https://spring.io/blog/2015/07/02/spring-boot-1-2-5-released SpringBoot 1.3.5 2016年5月10 參考https://spring.io/blog/2016/05/10/spring-boot-1-3-5-released SpringBoot 1.4.0 2016年7月28 參考https://spring.io/blog/2016/05/10/spring-boot-1-3-5-released SpringBoot 1.5.1 2017年1月30 參考https://spring.io/blog/2017/01/30/spring-boot-1-5-1-released SpringBoot 1.5.6 2017年7月27 參考https://spring.io/blog/2017/07/27/spring-boot-1-5-6-available-now SpringBoot 1.5.8 2017年10月17 參考https://spring.io/blog/2017/10/17/spring-boot-1-5-8-available-now SpringBoot 2.0.0 2018年3月1 參考https://spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga SpringBoot 2.2.0 2019年10月16 參考https://spring.io/blog/2019/10/16/spring-boot-2-2-0 SpringBoot 2.2.1 2019年11月7 參考https://spring.io/blog/2019/11/07/spring-boot-2-2-1-available-now
1)spring 1.x 在spring1.x時代,都是通過xml文件配置bean,隨着項目的不斷擴大,需要將xml配置分放到不同的配置文件中,需要頻繁的在 java類和xmlwenjianz文件中切換 2)spring 2.x 隨着jdk1.5帶來的注解支持,spring2.x可以使用注解對bean進行申明和注入,大大的減少了xml配置,簡化了項目的開發 最佳的配置方法: 1.應用的節本配置用xml,如數據源、資源文件等。 2.業務開發用注解,如service中注入bean等 3)spring 3.x 在spring3.x版本的時候,Spring3.x開始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,主要區別spring2.x的地方如下 1. 核心API更新到JAVA5.0,即采用了泛型 2. Spring表達式語言SpEl(Express Language) 3.可通過Java類提供IOC配置信息 XML配置方式,基於注解的配置方式,Spring3.0提供了基於Java類的配置方式。而最新基於Java類的配置方式非常靈活。 4. 通用類型轉換系統和屬性格式化系統 5.數據訪問層新增oxm(Object to xml,對象xml映射):通過元數據對象和xml轉化的映射 6.web層的增強:2.5版本中的注解如:@Controller,@Request Mapping等。新增了@CookieValue,@RequestHeaders 4)spring4.x 從spring4.x和springboot都推薦使用Java配置方式
//
Spring歷史版本變遷和如今的生態帝國 - 雲+社區 - 騰訊雲 --不錯
https://cloud.tencent.com/developer/article/1025723
// Spring核心功能指南-1-Spring功能介紹-肖海鵬的在線視頻教程 --這個視頻的12分開始有段描述很不錯,
https://edu.csdn.net/course/play/3057/50874?spm=1002.2001.3001.4143
J2EE sun定義的 必須用JEB jsp sevlet JDBC 模式適合企業開發嗎, 簡單的j2ee的開發 Spring是完美的框架嗎 老師是 9幾年畢業的,那時候 C++框架,C++平台大行其道 97年出來的java 2000年后市場越來越大。 95~2000年 C++比較強勢的情況下,后來回看C++出了很多問題, 微軟把VS c++ 轉向 dot net ,現在高校學.net也很少了。 spring向j2ee發起了挑戰,那么spring也不是完美的
J2EE是什么,主要包括哪些技術 - lanfeng521 - 博客園 ---初略看一下就好
https://www.cnblogs.com/zhshero/p/10390167.html
j2EE通俗bai的理解為開發網站的就du是,j2SE就是開zhi發桌面應用程序dao的。
包含zhuan的技術嘛,主要的就是shu開發網站需要的一些技術啦
比如:servlet,jsp,javaBean 框架:spring hibernate struts ibatis webwork
//==============應該是2008年前的事情了。 大致看一下就好。
轉發: Spring可能會越來越主流?_曲奇-CSDN博客
https://blog.csdn.net/yangxt/article/details/5397135?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-5397135.nonecase&utm_term=spring%20%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%BC%80%E5%A7%8B%E6%B5%81%E8%A1%8C%E7%9A%84&spm=1000.2123.3001.4430
Spring 自從2003年發布以來,一直是Java開源框架的奇跡之一。從2000年開始,伴隨着B/S架構逐漸引入企業應用軟件開發的領域,Java就逐漸成為企業應用開發的主流技術,一直到2003年,Struts+EJB一直是Java技術架構的不二選擇,然而這一切隨着2003年Spring以 without EJB的面目出現之后,一切都開始改變。
大概從2003年下半年開始,Spring+Hibernate就開始甚囂塵上,似乎那時候的Spring和Hibernate尚且不足以動搖J2EE規范以EJB為核心的領袖地位。但是2004年5月份,吸收了 Spring/Hibernate框架優點的EJB3 JCP委員會的成立,事實上宣判了Spring對EJB2的終結,EJB3則更像是Vendor們的一種自救行為。
2004年到2006 這三年時間以來,Spring取得了相當輝煌的成就,不但將EJB2趕進歷史,而且牢牢確立了Spring作為Java企業應用開發的主流地位。而今,甚至對技術比較保守的金融電信行業,也開始言必稱Spring,Spring已經成為Java框架的事實標准。
在2004年5月份之后,Hibernate Team開始和Spring公然決裂,這個事情放在兩年多以后的今天來看,原因是昭然若揭的,背靠JBoss的Hibernate Team已經成為EJB3規范的一部分,而JBoss希望力推的以EJB3為核心的Java架構來成為未來的企業應用主流標准,這種情況演變至今,變成了 Springframework和JBoss Seam的兩種不同技術架構的競爭關系。
2004年5月份,EJB3規范的起步,對Spring未來其實有很大的威脅,但是EJB3規范歷經兩年時間的難產,終於在2006年5月正式發布之時,已經為時過晚了,抬眼望去,已盡是spring的天下。
有意思的是,大致展望一下未來,Java的企業應用開發還能遵循Sun和JCP制訂的Java EE規范的道路走下去嗎?如果不是這樣,那么未來道路是什么呢?
觀察一下Java社區幾股大的勢力,會發現一些有意思的現象:
IBM 和BEA是Java社區的領導者,從2004年開始,IBM和BEA開始大肆宣傳SOA,將他們的目光從應用服務器領域挪到了松藕合企業服務領域,開展 SOA商業戰略。與此同時,EJB3專家委員會的領導者也悄然變成了JBoss和Oracle,是IBM和BEA無力爭取嗎?當然不是。IBM和BEA已經看到了應用服務器市場和底層框架平台即將被開源占領,商業價值萎縮,因而審時度勢進行戰略轉型。一方面押寶SOA戰略,大肆炒熱和培育SOA市場,另一方面也積極占領開源市場,IBM放出來WebSphere社區版本-Apache Geronimo,BEA干脆和Spring的咨詢公司interface21合作,提供spring框架在WebLogic上的商業技術支持,如今 EJB3對於他們來說已經形同雞肋,就拋給別人嚼吧。
將EJB3當塊寶的自然是應用服務器市場的跟隨者JBoss和Oracle,一方面憑借ORM的先天優勢,另一方面有出頭機會也不能放過,EJB3委員會幾乎成了JBoss和Oracle的天下。特別是JBoss,更加積極推出 JBoss Seam框架,希望確立以JSF+EJB3的架構樹立Java開發的標准,用以取代Struts/Spring/Hibernate的流行組合,因而開啟了EJB3和Spring 正面交鋒的戰爭。
Java Vendor中另外一股勢力Sun公司這兩年則一直自顧不暇,在應用服務器領域幾乎退出市場,直到最近才搞出來一個Glassfish,在開發框架領域也一直毫無建樹,推出的JSF至今還很不成熟,難擔大任,也許Sun都去忙着開源Solaris和JVM源代碼了。
幾個大的Vendor或戰略轉型,或自顧不暇,或忙於收購(Oracle),Java開發領域的主戰場被打掃一空,對決的雙方換成了Spring和JBoss。對決的武器則是spring vs Seam。
Spring 代表了不遵循通用標准,自己制訂游戲規則,不依賴容器的一方;JBoss代表了遵循通用標准,但是鎖定容器的一方。這場對決從2004年5月就開始上演,未來很長時間也會繼續下去。不過Spring已經站在優勢很大的地位上了。我個人覺得Spring會勝出這場對決,而Java企業應用開發的主流技術將倒向Spring這一邊,而Vendor們官方制訂的標准將被開發人員可憐的遺棄到一邊。開源技術開始決定Java企業開發的未來走向。
大致對比一下兩者:Spring vs EJB3,就會發現Spring從功能上面已經勝出很多了:
1、IoC容器spring勝出
Spring的IoC容器很強大,其bean管理功能超過了目前EJB3容器,配置方面Spring稍微復雜一些。不過對於全局性配置來說,XML要優於EJB3的annotation。
2、AOP能力Spring勝出
EJB3目前提供的AOP功能非常簡單,本來已經無法和Spring相比,至於集成AspectJ的Spring2.0,就更加望塵莫及了。
3、事務管理方面EJB3稍微領先
Spring提供了很棒的本地事務模型,也可以集成JTA,但是不支持分布式事務,當然這種場景也非常罕見。
4、Web框架spring勝出
EJB3 標准集成JSF,但是JSF並不成熟,和AJAX配合度也不好。Spring可以靈活集成各種Web框架和模板語言,自身也提供了相當強大的MVC框架,要是這還覺得不夠,那么spring webflow,portlet support都拿出來,那么EJB3就必敗了。
5、遠程訪問支持,大致持平
EJB3繼承了傳統的EJB遠程訪問能力,Web Services支持也不錯;不過Spring提供了更多更靈活的選擇,Java RPC,HTTP Invoker,Hessian/Burlap,WebServices。
6、框架集成能力,spring勝出
這是spring的傳統優勢項目,只要看看spring modules項目,看看n多第三方spring支持,就會發現spring現在的群眾基礎多么好,集成工作流,spring modules已經提供了方便的模板類,集成規則引擎,Cache,CMS,腳本語言,異步任務,安全驗證框架。。。。。。EJB3有點望塵莫及的味道
7、JMS,JMX,JCA等,EJB3領先一步
這些傳統EJB優勢項目往往應用的不太多,EJB3仍然是領先的。不過令人側目的是,Spring最近幾個版本在連續追趕EJB這些傳統優勢領域,到 Spring2.0為止,其JMS,JMX,JCA支持已經相當不錯了,可以說傳統EJB能夠做的,現在Spring也可以做得到,為Spring一統江湖掃清了最后的障礙。
這幾年除了Spring框架自身不斷完善和延伸到傳統應用領域,圍繞在Spring周圍的第三方框架也是越來越豐富,EJB3在annotation方面有些獨到的優勢,在一些傳統領域,還領先spring,但是總體來說,EJB3為核心的J2EE5.0規范很難和 Spring現在的2.0相匹敵,更何況Java的主力Vendor早已醉翁之意不在這里了,單憑JBoss的Seam,難以戰勝spring。
覺得Spring可能會越來越主流,甚至開始引領Java企業開發的未來發展道路,J2EE就靠邊站吧,也許Java社區也到了開源社區說了算的時代了。
//==========end
//--非常不錯,
Spring的誕生史 - 環信
https://www.easemob.com/news/1213
// 轉
Spring核心是什么
Spring出現的原因? Spring出現的原因 解除耦合 軟件開發的開閉原則:通過多態實現,要么子類重寫父類,要么增加方法 提高抽象層次; 提高抽象層次的方法 把子類對象賦給父類對象進行使用的動態多態 注入Injection:某一個類想要什屬性,通過set方法給他 就叫注入 依賴注入 Depenency Injection =DI 有set就能活 沒有就錯誤 配置文件(反射) Spring如何解除耦合 解耦合:首先解除邏輯耦合 mvc模式第一次解除了邏輯耦合 spring的IOC是進行深度解耦 日志:用來保持程序的健壯性,就是程序的運行記錄 代理需要在jdk1.5以上版本使用 jdk代理是基於反射的沒有反射就沒有辦法通用 調用代理類的的任何方法,都會執行到invoke方法 代理是模式 代理機制其實真正的代理的是方法 代理:proxy 代理的本質就是原產品不動,不做任何改變 要增值 要包裝 代理分類: 一.靜態代理:門面模式或裝飾模式 缺點:需要為每一個被代理的方法都寫一個代理方法,修改的時候特別值復雜,不靈活 二.動態代理 1.jdk動態代理:缺點:要想代理對象,被代理對象必須有接口,否側不能代理 2.CGLIB代理:優點:在被代理類沒有接口的情況下也能夠被代理,實際就是為當前類生成一個子類 代理類和被代理類都需要實現同一個接口,代理類中包含一個被代理類的對象,可以提供兩種方式把被代理對象賦給代理對象 調用被代理類,實現真正的邏輯,在自己的里面實現額外邏輯. 代理最終的要求就是簡單通用靈活 Spring核心(重點來了!!!!) Spring是一個無侵入式的輕量級開源框架 Spring兩大特性 : 1.IOC:控制反轉 IOC作用:解除類與類之間的關系耦合 解除耦合的方式用了四個技術點: 配置 容器 反射 注入(DI):利用set方法或者構造器給屬性賦值 2.AOP:面相切面編程 作用:為了解除業務邏輯耦合,例如耦合或者數據業務邏輯日志業務 AOP實現原理是基於代理的 Spring進行內部實現的時候 ,會檢測是否存在接口,存在時選擇jdk動態代理,不存在選擇CGLIB代理 Spring類似一個管家,后期幾乎所有內容都交給Spring管理,View層Spring不管理,與java相關的全部管理.(Spring容器) Spring的核心思想是解除程序中的耦合(解除了業務邏輯耦合,解除了類與類之間的關系耦合) 輕量級與重量級的區分: 1.性能開銷 2.框架本身的大小問題 3.使用的難易程度 Spring中所有的行為都是基於Spring能夠管理所有的類 Spring也有持久層框架,但是因為性能不強,所以沒有人用,用來給hibernate和mybitas支持 Spring對web框架也是有支持的 Spring還是一個mvc結構的框架 Core解除的是類級別的耦合 AOP解除的是方法級別的耦合 IOC控制反轉 Inversion Of Control 高層模塊不應該依賴底層模塊(如Action依賴Dao層) 實現必須依賴抽象,而不是是抽象依賴實現 依賴注入:Dependency Injection DI是IOC的核心實現原理 通俗的說就是利用set方法或者構造器給屬性賦值 搭建Spring環境: 1.加入jar包 2.寫配置文件:applicationContext.xml 必須放在Src下 可以更改名字一般叫Spring.xml 一個Spring可以對應多個XMl文件,配置文件的划分是根據業務邏輯划分的 跟標簽里寫東西是Schema Spring的核心是一個context容器 想要什么對象就在spring中配置這個對象 Spring會自動創建對象並且進行初始化 注入類型分為三類: Type1 侵入式(依賴Spring) Type2 (set/get) 和type3(構造器注入)是非侵入式 Spring中的接口是為了提高抽象層次,是變量接收的一個中介,所以Srping不需要管理接口 所謂的組件就是可以直接實例化,可以直接用的 構造器注入 里面的屬性 ref=references引用 index要賦值屬性的下標,從0開始 構造器注入唯一的優點就是時效性好,創建對象時直接賦值. 構造器注入作為了解 不需要掌握 構造器和set/get方法同時存在時取決於set/get方法