J J2EE 和spring的发展历史
转:14时就用spring 4, 18年springboot 2.0
Spring1.02004年3月24
包含IoC,AOP,XML配置
参考https://spring.io/blog/2004/03/24/spring-framework-1-0-final-released
Spring2.02006年10月3
参考https://spring.io/blog/2006/10/03/spring-2-0-final-released
Spring2.52007年11月19
支持注解,减少了xml配置
参考https://spring.io/blog/2007/11/19/spring-framework-2-5-released
Spring3.02009年12月16
完全利用了Java5中的改进,并为 JEE6 提供了支持。支持Java配置
参考https://spring.io/blog/2009/12/16/spring-3-0-0-is-now-available
Spring4.02013年11月1
完全支持 JAVA8
参考https://spring.io/blog/2013/11/01/spring-framework-4-0-rc1-available
Spring5.02017年9月28
参考https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga
What's New in Version5.0JDK8+ 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)
SpringBoot1.02014年1月22
参考https://spring.io/blog/2014/01/22/spring-boot-1-0-0-rc1-released
SpringCloud1.02015年3月14
参考https://spring.io/blog/2015/03/04/spring-cloud-1-0-0-available-now
SpringBoot1.2.52015年7月2
参考https://spring.io/blog/2015/07/02/spring-boot-1-2-5-released
SpringBoot1.3.52016年5月10
参考https://spring.io/blog/2016/05/10/spring-boot-1-3-5-released
SpringBoot1.4.02016年7月28
参考https://spring.io/blog/2016/05/10/spring-boot-1-3-5-released
SpringBoot1.5.12017年1月30
参考https://spring.io/blog/2017/01/30/spring-boot-1-5-1-released
SpringBoot1.5.62017年7月27
参考https://spring.io/blog/2017/07/27/spring-boot-1-5-6-available-now
SpringBoot1.5.82017年10月17
参考https://spring.io/blog/2017/10/17/spring-boot-1-5-8-available-now
SpringBoot2.0.02018年3月1
参考https://spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga
SpringBoot2.2.02019年10月16
参考https://spring.io/blog/2019/10/16/spring-boot-2-2-0SpringBoot2.2.12019年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,@RequestHeaders4)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方法