目录
一,什么是Spring
Spring是分层的Java SE/EE应用的架构,其核心是IoC(反转控制)和AOP(面向切面编程),提供了展示层的SpringMVC和持久层SpringJDBCTemplate以及业务层事务管理等众多应用技术,Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发
二,Spring的优缺点
- 优点:
(1)IoC:集中管理对象,可以降低对象和对象的耦合度,方便维护对象
【 扩展:紧耦合和松耦合有什么区别】
① 紧耦合:紧密耦合指类之间高度依赖
②松耦合:它通过单一职责,关注分离,依赖倒置的设计原则实现,IoC是DIP的设计原理,DI是DIP的具体实现
(2)AOP:在不修改代码情况下对业务代码(增删改查)增强,减少重复代码,提高开发效率
(3)事物:通过添加注解@Transactional声明的方式对事物灵活管理,提高了开发的效率
(4)集成框架:Spring的集成能力很强(基于源码),只需要简单配置就可以集成第三方框架
(5)Java EE API:简化了开发,因为封装了很多功能性代码
(6)源码:学习了Spring底层实现,反射··设计模式值得我们学习,提供很多扩展接口在外部进行扩展- 缺点:
(1)应用层面是没有缺点的
(2)简化开发:如果深入到底层了解很困难(上层使用越简单,底层封装越复杂)
(3源码:由于Spring大而全,集成了很多框架,提供了很多扩展点,对于深入学习带来了一定的困难
三,Spring的设计理念和核心,目标
- ①Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台
- ②Spring设计理念:在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO(面向对象)设计方法;Spring通过IoC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IoC容器,实现解耦
- ③Spring框架的核心:IoC容器和AOP模块。通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务
四,什么场景使用Spring
应用场景:JavaEE企业应用开发,包括SSH、SSM等
- Spring价值
Spring是非侵入式的框架,目标是使应用程序代码对框架依最小化
Spring提供一个一致的编程模型,使应用直接使用POJO开发,与运行环境隔离开来
Spring推动应用设计风格向面向对象和面向接口开发转变,提高了代码的重用性和可测试性
五,创建并使用Spring
接下来使用Maven 方式来创建⼀个 Spring 项目,创建 Spring 项目和 Servlet 类似,总共分为以下 3
步:
- 创建⼀个普通 Maven 项⽬
- 添加 Spring 框架⽀持(spring-context、spring-beans)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
- 添加启动
最后在创建好的项目 java 文件夹下创建⼀个启动类,包含 main 方法即可
public class App {
public static void main(String[] args) {
}
}
六,Spring由哪些模块组成
Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器(Core Container) 、 AOP(Aspect Oriented Programming)和设备支持(Instrmentation) 、数据访问与集成(Data Access/Integeration) 、 Web、 消息(Messaging) 、 Test等 6 个模块中
- spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
- spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
- spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
- spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。
- spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。
- spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
- spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
七,Spring框架使用了哪些设计模式(源码)
- 工厂模式:Spring的BeanFactory是简单工厂模式的体现,根据传入一个唯一标识来获得Bean对象,但是是否在传入参数前参数后创建要根据情况而定
- 单例模式:保证一个类仅有一个实例,提供一个访问它的全局访问点BeanFactory,Bean默认为单例模式,但没有从构造器级别控制单例,因为Spring管理的是任意的Java对象
【扩展:单例模式的好处】
①对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;
②由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时- 适配器模式:Spring定义了是适配接口,使得每种Controller有对应的适配器,这样在扩展Controller时,只需要一个适配器就完成SpringMVC的扩展
- 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
- 观察者模式:Spring的事件驱动模型使用的是观察者模式,Spring的Observer模式常用到的地方就是listener的实现
【扩展:观察者模式是什么,事件驱动模型是什么】
①观察者模式是一种对象行为型模式,它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应
②事件驱动模型是观察者模型的应用,其核心构件通常包含以下几个:- 事件源:负责产生事件的对象。比如我们常见的按钮,按钮就是一个事件源,能够产生“点击”这个事件
- 事件监听器(事件处理器):负责处理事件的对象
- 事件:或者称为事件对象,是事件源和事件监听器之间的信息桥梁,是整个事件模型驱动的核心。
八,spring的核心类,一般组件有哪些
- 核心类:
BeanFactory:产生一个新的实例,可以实现单例模式
BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能- Spring 框架中的组件:
①接口 - 定义功能
②Bean 类 - 它包含属性,setter 和 getter 方法,函数等
③Bean 配置文件 - 包含类的信息以及如何配置它们
④Spring 面向切面编程(AOP) - 提供面向切面编程的功能
⑤用户程序 - 它使用接口