Spring
什么是 Spring
Spring 是一个轻量级的 DI / IoC
和 AOP
容器的开源框架。 Spring 提倡以“最少侵入”的方式来管理应用中的代码。
Spring的根本使命:简化 Java 开发。
Spring 的优势
-
低侵入/低耦合(降低组件之间的耦合度,实现软件各层之间的解耦)独立于各种应用服务器,基于 Spring框架的应用,可以真正实现
Write Once,Run Anywhere
的承诺; -
Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦;
-
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用;
-
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问;
-
Spring的高度开放性,并不强制应用完全依赖于 Spring,开发者可自由选用 Spring框架的部分或全部。
-
降低 Java 开发难度
Spring 能帮我们做什么?为什么使用 Spring
① Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
② Spring 的面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
③ Spring 能非常简单的帮我们管理数据库事务。
④ Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤ Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套 Spring MVC框架,来方便web层搭建。
⑥ Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
Spring是怎么做到它的根本使命的
核心问题解决
1,解耦
开发人员希望聚焦DDD的开发,首先要解决的事情是我修改一个业务代码,不希望显示层、模型层和控制层都要改。不希望改一个类,依赖它的类也需要改。
Spring为了应对这个问题使用了控制反转的理念。将所有的依赖都由框架注入到一个上下文环境中(DI)。在这个环境中,Bean之间可以自由的使用。
2,复用
有了DI(依赖注入)的支持,开发人员可以具体聚焦DDD的开发了。一个优秀程序员的最大的美德是懒惰。一些逻辑,比如日志,鉴权,很多地方都需要用到。这个业务逻辑关系又不是很紧密,代码基本上就是拷贝一下。
那怎么能将这些业务特点不强的逻辑从开发人员的工作中剔除掉呢?这就用到了AOP(面向切面)编程。
以上 Spring要解决的核心问题解耦和复用的解决方案就是 Spring的核心:控制反转、依赖注入和AOP。
核心功能实现
为了将Spring的核心功能实现出来,就需要用到Robert Martin提出的SOLID原则。分别是单一职责、开放封闭、里氏替换、接口隔离和依赖倒置。
控制反转、依赖注入和AOP,分别对应了三个 Spring的jar包: Spring-beans
、Spring-context
、Spring-aop
。每个包单一的负责一个核心功能的实现。这些都需要先做对象的实例化,这个功能由 Spring-core
这个jar包来实现。
在 Spring-beans
中, Spring
使用工厂模式来管理程序中使用的对象Bean
。每个Bean
实例以BeanDefinition
的形式被创建,通过java
的反射机制将需要初始化的字段写入,最终保存在BeanDefinitionMap
中。这整个过程由容器来实现,完成了控制反转。有了控制反转,开发者可以通过调用getBean
获取到所需要的对象。 Spring-context
提供文件列表的读入,将所有依赖的Bean放到一个Context中,就是常说的依赖注入。
AOP
的主要作用是不通过修改源代码的方式将功能代码织入来实现对方法的增强。实现的关键在于使用了代理模式。
代理主要分为静态代理和动态代理。静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
代理对象的方法 = 增强处理 + 被代理对象的方法。
Spring有哪些模块
图解如下:
SpringAOP,采用了面向切面的思想,使 Spring框架管理对象支持AOP,同事这个模块也提供了事务管理,可以不依赖具体的EJB组件,就可以将事务管理集成到应用程序中。
SpringORM,提供了对现有的ORM框架的支持,例如Hibernate,JDO,Mybatis等。
SpringDAO,提供了对数据访问对象(Data Access Object,DAO)模式和JDBC的支持,把实现业务逻辑和数据库访问的代码实现分离等。
SpringJEE:J2EE开发规范的支持,例如EJB 。
SpringWeb:提供了Servlet监听器的Context和Web应用的上下文,同时还集成了一些现有的Web框架,如Struts。
SpringCore:提供IOC容器对象的创建和处理依赖对象关系 。 Spring框架的核心容器,他提供了 Spring框架的基本的功能,这个模块最主要的是BeanFactory,它使用工厂模式来创建所需要的对象,同时Beanfactory使用IOC的思想,通过读取XML文件的方式来实例化对象。
网友评论