spring官网地址:spring.io/
Spring是分层的full-stack(全栈)轻量级开源框架,以IOC和aop为内核,提供了展现层 Spring MVC 和业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,已 经成为使用最多的 Java EE 企业应用开源框架。
spring全家桶:脚手架框架springboot、微服务框架springcloud
Spring的核心架构
1 IOC
1.1 什么是IOC
Inversion Controller (控制反转/反转控制),注意它是一种思想,不是一种技术。
描述的事情:Java开发领域对象的创建管理,传统开发方式:类A依赖于类B,往往在类A中new B的对象。
在IOC思想开发方式中:我们自己不去new,而是由IOC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使用哪个对象,去向IOC容器去要即可。
优缺点: 失去了创建、管理对象的权利,优点:不用考虑对象的创建管理等一系列事情。
为什么叫控制反转?
控制:对象的创建(实例化、管理)权利
反转:控制权交给外部环境(Spring框架、IOC容器)
1.2 IOC解决了什么问题
解决对象之间的耦合问题
1.3 IOC和DI的区别是什么
DI:dependancy Injection IOC和DI描述的是同一件事情(对象实例化和关系维护这件事情),只不过角度不一样
2 AOP
2.1 什么是aop
AOP:Aspect Oriented Programming 面向切面编程,是oop的延续
OOP的三大特征:封装、继承和多态,是一种垂直纵向继承思想
OOP编程思想可以解决大多数的代码重复问题,但是有一些情况是处理不了的,比如下面的在顶级父类 Animal中的多个方法中相同位置出现了重复代码,OOP就解决不了
横切逻辑代码:
横切逻辑代码存在什么问题?
- 横切代码重复问题
- 横切逻辑代码和业务逻辑混在一起,代码臃肿,维护不方便
AOP横向抽取机制,横向将横切逻辑代码和业务逻辑代码分开。代码拆分容易,那么如何在不改变原有业务逻辑的情况下,悄无声息的把横切逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果???这个是比较难的
2.2 aop在解决什么问题
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。
2.3 为什么叫做面向切面编程
「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以面向横切逻辑
「面」:横切逻辑代码往往要影响的是很多个方法,每一个方法都如同一个点,多个点构成面,有一个 面的概念在里面