关键词:Spring 框架、SpringIOC 容器、SpringAOP、SpringMVC、Springboot、设计模式
一、Spring 是什么
Spring 框架是一个开源的、轻量级的 J2EE 开发框架,核心思想是 IOC 实现松耦合,利用 AOP 将应用的业务逻辑与系统服务分离;
广义上地说,Spring 是一系列开源项目的总称,SpringIOC\SpringMVC 等只是其中的开源项目而已
二、Spring 生态
Spring 容器:
专门存放和管理对象及对象间关系的类
https://blog.csdn.net/zorkeaccount/article/details/80818711
SpringIOC:
利用工厂模式 + 反射实现 Spring 容器
https://blog.csdn.net/zorkeaccount/article/details/80503941
SpringAOP:
动态代理,即在运行时生成 AOP 代理对象
https://blog.csdn.net/zorkeaccount/article/details/80517710
SpringMVC:
基于 Servlet 的一个 MVC-web 框架,是 Spring 的一个模块,提供了一种轻度耦合的方式来开发 web 应用;
** 通过 Dispatcher Servlet, ModelAndView 和 View Resolver**,使得开发 web 应用变得很容易;解决的问题领域是网站应用程序或者服务开发——URL 路由、Session、模板引擎、静态 Web 资源等等。
Springboot:
由于 Spring 框架需要进行大量的配置,**Spring Boot 引入自动配置的概念,让项目设置变得很容易,**降低了项目搭建的复杂度;
Spring Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序
Spring 设计模式:
简单工厂(静态工厂方法)模式:
其实质就是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类,不属于 23 种 GOF 设计模式之一;
如 BeanFactory 类,就是根据传入的一个唯一标识来获取 bean 对象,但传参前还是传参后创建该 bean 对象视具体情况而定
工厂方法 Factory Method 模式:
定义一个用于创建对象的工厂 bean 接口,由实现类子类决定实例化哪一个类,也即工厂方法模式将一个类的实例化(bean 对象生成)延迟到其子类;
如 FactoryBean 接口及其各个实现子类就是典型的工厂方法模式
单例 Singleton 模式:
保证一个类只有一个实例,并对外提供一个可以访问它的全局访问点;
Spring 中每个 bean 定义只生成一个对象实例,有两种模式饿汉模式(即类加载时已初始化,缺省时默认为该模式,容器启动即实例化容器时,为所有 spring 配置文件中定义的 bean 都生成一个实例)和懒汉模式(即类加载时不初始化,)=>【如可通过静态变量是否初始化实现饿汉和懒汉两种方式】
适配器 Adapter 模式:
将一个类的接口转换成另外一个接口
Spring 中对于 aop 的处理用到 Adapter 模式,如因 Advisor 链需要的是 MethodInterceptor 对象,所以每一个 Advisor 中的 Advice 对象都是适配成对应的 MethodInterceptor 对象
包装器 Decortor 模式:
动态地给一个对象添加一些额外的职责,增加功能角度而言该模式比生产子类更加灵活;
Spring 中用到包装器模式的类如:*Wrapper.java,或者*Decorator.java
代理 Proxy 模式:
为其他对象提供一种代理以控制对这个对象的访问,结构上类似于 Decortor 模式,但 Proxy 为控制是一种对功能的限制而 Decortor 是增加职责
Spring 中 aop 的思想就是 Proxy 模式,比如 JdkDynamicAopProxy 和 Cglib2AopProxy
观察者 Observer 模式:
定义对象间一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于该对象的其他对象均会得到通知并自动更新
Spring 中 listen 的实现,如 ApplicationListener
策略 Strategy 模式:
定义一系列算法,并且将它们一个个封装起来且可以互相替换,使得算法可独立于使用它的客户而发生变化
Spring 中如 SimpleInstantiationStrategy
模板方法 Template Method 模式:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,该模式一般是需要继承的(也可以不需要继承的,如 JdbcTemplate)
Springboot 注解:
@SpringBootApplication:
Springboot 的入口注解,是多个注解的组合,其中比较重要的是 @EnableAutoConfiguration 注解,即可自动化配置,这是 SpringBoot 可以方便快捷地新建和启动一个项目的关键
@EnableAutoConfiguration:
该注解比较重要的是导入了可自动化配置导入选择器,@Import({EnableAutoConfigurationImportSelector.class})
有关该 springboot 注解的详细分析过程可见,springboot 自动化配置
三、Spring&SpringMVC&Springboot 之间的关系和区别
** Spring 是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架**,通过容器管理 JavaBean(代替 EJB)的配置和声明周期; -> 即 Spring 是一个管理 bean 的容器,可称之为 SpringIOC 容器
SpringMVC 是一个 MVC 框架容器,负责 controller 相关的 Bean 的管理,且 SpringIOC 容器的子容器;
Springboot 本质上就是 Spring,只不过做了一些 SpringBean 的默认配置(开箱即用、快速启动);
通俗地说,就是:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些**“懒人整合包”(starter)**。
Spring 是一个“引擎”;
Spring MVC 是基于 Spring 的一个 MVC 框架 ;
Spring Boot 是基于 Spring4 的条件注册的一套快速开发整合包。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于