Spring一般指Spring Framework,它是一个轻量级Java开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为了开发Java应用程序提供了全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序开发。
Spring最根本的使命是解决企业级应用开发的复杂性,提供了一个简单的开发方式,来简化Java开发。通过这个开发方式,将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等。
为了降低Java开发复杂性,Spring采取了4种关键策略:
Spring的设计理念是在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO(面向对象)设计方法;Spring通过IOC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IOC容器,实现解耦;
Spring框架的核心是IOC容器和AOP模块。通过IOC容器管理POJO对象以及它们之间的耦合关系;通过AOP以动态非侵入式的方式增强服务。
优点:
(Spring就是一个大工厂,通过IOC可以将所有对象的创建和依赖关系的维护,交给Spring管理。)
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序。
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis等)
降低JavaEE API的使用难度
Spring对JavaEE API开发中难用的API(JDBC,JavaMail,远程调用等),都提供了封装,使得这些API应用难度大大降低。
缺点:
Spring明明是一个轻量级的框架,却提供一整套的解决方案,大而全。
使用门槛升高,入门Spring需要较长时间。
Spring依赖反射,反射影响性能。
Spring MVC是Spring的一部分,属于一种设计模式,主要用于WEB应用的网络接口,它是Spring的一个模块,通过Dispatcher Servlet,ModelAndView和View Resolver,简化应用的开发。
Spring MVC应用开发:
1,主要通过配置文件声明dispatcher servlet;通过配置文件声明servlet详情,如MVC resource,data source, bean等。增加业务代码,如controller,service,model等,最后生成war包,通过容器进行启动。
Spring Boot是为了简化配置进一步简化Spring应用的搭建和开发过程的轻量级框架。它的目的在于实现自动化配置,降低项目的复杂度。
由于Spring-boot-starter-web模块中包含了一个内置tomcat,可以直接提供容器使用。基于Spring boot,不是原来的配置没有了,而是有一套默认的配置,可以把默认配置看作通用的约定。因此Spring boot遵守也是约定优于配置原则。
在Spring Boot中,会发现引入的所有包都是包含started形式,如:
spring-boot-starter-web,针对web应用;
spring-boot-starter-jdbc,针对jdbc;
Spring-boot-starter-data-jpa,基于JPA协议的持久层框架;
spring-boot-starter-cache,针对缓存支持
这些starter多到了开箱即用,只需要引入相关的jar,即可使用里面的功能。
而对于Spring,spring MVC,Spring Boot三者的关系:
三者专注的领域不同,解决的问题也不同。Spring是一个大家族,里面有很多衍生产品,例如Security,boot,JPA。但它们都基于Spring的IOC和AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,在此两者的基础上实现了其他的衍生产品的高级功能;Spring MVC是基于Servlet的一个MVC框架,主要解决WEB开发的问题,因为Spring的配置非常复杂,各种xml,propertis处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性的退出了Spring boot,它遵循约定优于配置,降低了Spring使用门槛,但又不失Spring原本灵活强大的功能。
总结是Spring MVC和Spring Boot都是基于Spring,而Spring MVC是基于Spring的一种MVC框架,而Spring boot是基于Spring的一套快速开发整合包。