Spring 框架给我们带来什么样的好处
什么是 Spring
Spring 是一个轻量级 Java 开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的 JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发 Java 应用程序提供全面的基础架构支持。Spring 负责基础架构,因此 Java 开发者可以专注于应用程序的开发。Spring 最根本的使命是解决企业级应用开发的复杂性,即简化 Java 开发
Spring 给我们带来哪些好处
- 帮我们进行管理 Bean,不需要我们自己手动 new 了
- 创建完对象之后,能够帮我们自动赋值
- 可以对创建出的 Bean 对象进行功能性的增强
- 简化开发
上面所说的这些功能的底层都依赖于它的两个核心特性:依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP)
Spring 简化开发 4 大策略
????基于 POJO 的轻量级和最小侵入性编程
之前是怎么写代码,还是怎么样的方式,不对之前的方式进行约束
????通过依赖注入和面向接口实现松耦合
依赖注入(DI):让 Bean 与 Bean 之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起
控制反转(IOC):Spring 里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由 Spring 容器来完成,然后注入调用者,因此也称为依赖注入。改变一个模块不影响其他模块或者小影响
????基于切面和惯例进行声明式编程
动态添加功能,通过声明式代码增强让程序员只关心业务,声明式不需要指定步骤
????????通过切面和模板减少样板式代码
内部提供好很多内置实现,把内置的实现封装成了模板
Spring 框架的设计目标,设计理念,和核心是什么
Spring 设计目标
Spring 为开者提供一个一站式轻量级应用开发平台
Spring 设计理念
在 JavaEE 开发中,支持 POJO 和 JavaBean 开发方式,使应用面向接口开发,充分支持 OO(面向对象)设计方法;Spring 通过 IoC 容器实现对象耦合关系的管理,并实现控制反转(将对象的创建权交给了 Spring),将对象之间的依赖关系交给 IoC 容器,实现解耦
Spring 框架的核心
IoC 容器和 AOP 模块。通过 IoC 容器管理 POJO 对象以及他们之间的耦合关系;通过 AOP 以动态非侵入的方式增强服务。IoC 让相互协作的组件保持松散的耦合,而 AOP 编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件
Spring 的优缺点是什么
优点
????????方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给 Spring 管理
????AOP 编程的支持
Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
????声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
????方便程序的测试
Spring 对 Junit4 的支持,可以通过注解方便的测试 Spring 程序
????方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis 等)
????降低 JavaEE API 的使用难度
Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低
缺点
- Spring 明明一个很轻量级的框架,却给人感觉大而全
- Spring 依赖反射,反射影响性能
- 使用门槛升高,入门 Spring 需要较长时间
Spring 模块结构图
????Spring 总共大约 20
个模块
这些模块被整合在核心容器(Core Container)AOP 和设备支持、数据访问及集成、Web、报文发送、Test 6 个模块集合
Spring 模块与依赖关系
Core Container(核心容器)
- Core:模块主要包含 Spring 框架最基本的核心工具类,Core 是其他组件的基础核心
- Beans:模块主要包含访问配置文件、创建/管理 Bean 以及 IOC/DI 相关的类
- Context:继承了 Beans 的特性,主要为 Spring 提供大量的扩展,如国际化、事件机制、资源加载等待。ApplicationContext 接口是 Context 模块的关键
- Expression:模块提供了一个强大的语言表达式
AOP and Instrumentation
提供符合 AOP Alliance 标准的面向切面编程的实现,可以让你定义如方法拦截器和切点,从而降低程序之间的耦合性
- AspectJ:提供了与 AspectJ 的集成
- Instrumentation:提供用于某些应用程序服务器的类工具支持和类加载器实现
Messaging
该模块具有来自 Spring Integration 项目的关键抽象,如 Message,MessageChannel,MessageHandler 等。它们构成基于消息的应用程序的基础。该模块还包括一组注释,用于将消息映射到方法,类似于基于 Spring MVC 注释的编程模型
Web
- Web:提供了基本的面向 Web 的集成功能,如文件上传功能以及使用 Servlet 监听器和面向 Web 的应用程序上下文对 IoC 容器的初始化
- WebMVC:(也称为 WebServlet 模块)包含基于 Spring 的 ModelViewController(MVC)支持和针对 Web 应用程序的 Rest Web 服务实现
- WebPortlet:(也称为 WebPortlet 模块)提供 Portlet 环境中的 MVC 实现
Data Access/Integration
- JDBC:提供了 JDBC 抽象层,从而无需进行繁琐的 JDBC 编码和数据库特定错误代码(不同数据代码可能不同)的解析
- 事务:支持对实现特殊接口的类以及所有 POJO(普通 Java 对象)进行编程和声明式事务管理
- ORM:该模块为当前流行的 ORM(包括 JPA,JDO 和 Hibernate)提供了集成层。使用 ORM 模块,可以将所有这些 O/R 映射框架与 Spring 提供的所有功能结合使用,如前面提到的事务管理功能
- OXM:提供了一个抽象层,该抽象层支持 Object/XML 映射实现,例如 JAXB,Castor,XMLBeans,JiBX 和 Xstream
- JMS:包含用于生成和使用消息的功能。从 Spring Framework 4.1 开始,提供了与 SpringMessaging 模块集成
Test
该模块支持使用 JUnit 或 TestNG 对 Spring 组件进行单元测试和集成测试