写在文章前

Spring 官网为: ​​spring.io​​ 多打几遍就记住了哈

Spring的发展史

(1) 春天来了—— Spring 来了!

  Spring 在起源可以回溯到 Rod Johnson 编写的“ Expert One-to-One J2EE Design and Development ”一书 (Wrox , 2002) 。在这本书中, Rod 展示了他的​​interface21​​ 框架,他为自己的应用编写了这一框架。这一框架被发布到开源世界后,组成了现在我们所知的 Spring 框架的基础。

Spring 在早期的 beta 和发布备选版本阶段进行得很迅速,第一个正式版本 1.0 在 2004 年 3 月 24 日 发布。

(2)What Is Spring(Spring 是什么 ) ?

  或许解释清楚 Spring 技术到底是什么会很困难。通常, Spring 是指一个用于构造​​JAVA 应用程序的轻量级框架​​,但这句话包含两个有趣的地方。首先,你可以采用 Spring 来构造任何程序,这一 Apache Struts 这样的框架不同,你不限定于只编写 WEB 应用。其次,以上解释中的“轻量级”并不意味着类数量很少,或者发行包大小很小,实际上,它指的是 Spring 哲学原理的总称——那就是最少的侵入。 Spring 是轻量级的,意味着你只需对你的程序代码做很少改动 ( 假若有的话 ) ,而获得 Spring 核心带来的好处,你也可以在任何时候选择抛弃 Spring ,你会发现这实在很容易。注意,上面这句话只针对 Spring 核心本身——很多附加的 Spring 组件,比如数据访问,需要与 Spring 框架有相对紧密得多的耦合关系。但是,这些耦合带来的好处显而易见。

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

(3)Spring 版本发展

  1. Spring1.x 时代
    在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
  2. Spring2.x时代
    随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。
  3. Spring3.x到Spring4.x(现在)
    从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。

什么是Spring

1、Spring的核心是一个轻量级(Lightweight)的容器(Container)。
2、Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
3、Spring提供AOP(Aspect-oriented programming)概念的实现方式。
4、Spring提供对持久层(Persistence)、事物(Transcation)的支持。
5、Spring供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。
6、Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。

Spring = IOC+AOP ?

Spring = IOC+AOP ?

其实刚开始是这样的,只不过随着Spring家族的慢慢庞大,就慢慢多起来了,但核心还是IOC和AOP

Spring的IOC和AOP

可以从上面的链接去看,也可以看下面的简要回答。

为什么使用Spring?

没有Spring的时候我们是如何工作的?

在Web项目中我们都是面相接口进行编程,如UserService接口 要使用

UserService userService=new UserServiceImpl();

我们需要对接口的引用指向他的一个实现,如何UserService在10个地方用,我们需要new 10次,
假如我们有一天因为项目版本迭代,接口的指向变了?那么我们需要在编码中直接进行修改
​​​(有人就说,我直接改代码不就行了?别改代码,只需要添代码,以前所有的老代码,都是有价值的,需要尽力保留)​​ 所以首先在代码中我们要谨慎使用new 关键词,如果有一天版本迭代,你 new 的地方是不是都需要改?

如果不使用new 关键词创建对象,我们该如何去处理这个问题?

那我们使用工厂模式去创建对象,如果我们有需要直接去工厂中去取就可以了

​(为了能甩锅,人们发明了「简单工厂模式」,谁实现简单工厂谁背锅){工厂模式解决了复杂的构造逻辑耦合隐藏了创建过程的复杂度}​

高耦合的痛苦

这里解决了接口引用变更的问题,不用每一处取修改,只修改工厂就行

那么为了尽量减少牵一发而动全身,工厂模式中创建的对象中需要其他对象的创建也应该使用工厂模式

那么有可能我们需要一个对象就创建了n个工厂

这大大加重了开发复杂性,加重了开发成本

项目经理跟甲方说我们项目可以完成,有两个选择:1.项目工期延长,但是以后需求更改开发周期会变短2.项目按期完成,但以后需求更改开发周期会比较长
甲方会说什么?我要按期执行还要需求更改短

为了快又好,Spring的IOC(对象的构建技术)解决了我们上述的问题

控制反转 代码控制依赖 容器控制依赖

依赖注入 容器动态的将依赖关系注入到组件当中

Spring两大特性:IOC和AOP
他们对应着两个常见问题对象管理和切面编程

1.在没有Spring之前,我们是如何工作的,为什么使用Spring或Spring解决了我们什么样的问题

2.什么是IOC和DI,如何去理解

3.Spring中的配置方式有哪些

4.Spring的xml常见配置

5.Spring的AOP

6.Spring的事务如何配置

7.附录

8.常见问题:

Spring从入门到放弃 - 不完全指南_工厂模式

写在最后

Spring从入门到放弃 - 不完全指南是个人在Java学习中不断总结和一些体会分享给大家,希望转载注明地址。