1、简洁有力,干掉了j2ee容器层特别是ejb,spring在rod Johnson十几年前一个人单挑j2ee体系开始,到十年前开始大行其道至今,基本上是java开发领域的事实标准。从此大部分开发者去掉了ejb的束缚,不需要强依赖容器的包袱,基本上一个系统一些个jar或者一个war就搞定了。装配框架,web框架,orm框架,这个web开发套件里,web框架先后兴衰了无数种(Struts,webwork,jsf,tapestry,wicket,turbine等等),orm主流也有hibernate和mybatis,装配这一块spring还没有动摇过。
2、系统层面的组装:这个是spring beans的基本功能,通过一些明确的契约方式装配好整个系统(xml也好,annotation也好,现在的spring-boot-starter也好),统一管理了各个对象的生命周期,以及运行期对象间的关系。
3、AOP与事务控制:AOP在装备和beans管理的基础上,实现了前所未有的编程视角,以切面方式控制系统的各个处理环节,提供了很多优雅的解决办法,特别是tx,日志,intercepter等。
4、足够灵活:从装配这一层来看,spring基本对业务是非侵入性的,业务代码这一块不会直接跟spring的任何库有直接依赖关系,即去掉spring,重新写点代码组装一下对于简单工程完全是没有问题的。并且很多spring现有的东西,都是可以自定义的,比如觉得xml的bean方式配置不爽,可以自己定义namespace handler和parser,甚至用spring-xmlbeans不需要xsd就能按bean本身的结构自动装配。比如可以自定义一堆annotation,然后用AOP去处理自己想要的功能。
5、生态体系化支撑:除了核心的库和spring-boot,还有spring-test,spring-cache,spring-task,spring-ws,spring-jms,spring-data,spring-integration,spring-batch,spring-security,springmvc。。。等等
6、spring更是一种研发模式,而不仅仅是一个框架:基本上用了spring,就选了一种对项目开发和运行视图的一个基础划分结构,怎么分层便于装配,怎么处理不同层次的关系、怎么处理通用性的一些非功能性需求等等,配合业务模块和功能的划分,把项目结构清晰的确定下来便于任务估计、工作分配和大规模分工协作。