目录
Sping 框架两大核心模块
IOC&DI
IOC:
Invension Of Control 控制反转(在运行时基于反射发现组件类和注册对象的过程)
发现:运行时让IOC容器发现组件类
1.组件类的层级不能高于启动类,只能小于等于
2.组件类上需要有IOC注解
注册:发现后就会触发注册 注册就是创建对象放入到IOC容器
创建对象的控制权 反转给了IOC容器
DI:
Dependency Injection 依赖注入(赋值的过程)
注入:在运行时从IOC容器中找到与指针相匹配的对象赋值给指针的过程
发现 --> 注册 --> 注入 都是在运行时发生
先有控制反转 再有依赖注入 缺一不可
Component 组件(组成工程的元件,指的是类(运行前就有的类))
Bean / JavaBean 组件 指的是对象 运行时产生的对象(被IOC容器发现后创建的对象)
什么是控制权?
创建对象的控制权 new 构造方法()
高内聚低耦合:编程思想
耦合=依赖(工程依赖工程 类依赖类)
高内聚就是一个类封装的很完善,每个类只完成一项任务,也就是常说的单一责任原则。
高耦合:直接依赖了具体实现类
解耦合1:
下层面向接口,解决代码修改风险1的问题
解耦合2:
下层提供工厂方法 解决代码修改风险2的问题
解耦合3:
Spring IOC
解耦合最终目的:为了让上层不关心下层
常用的具有IOC功能的注解
1.@Controller / @RestController
用于控制器类的发现和注册
2.@Service
用于Service业务类层的发现和注册
3.@Repository(如果用了MyBatisi框架就不会用到这个注解)
用于DAO层类的发现和注册
4.@Component
用于任何一个普通类的发现和注册
5.@MapperScan()
用于发现Mapper包,在运行时创建接口的实现类,并注册对象到IOC容器
IOC实现方式有3种
面试时要会说出哪三种
1.基于XML文件实现(框架早期使用 已淘汰)
XML文件写在resources目录中,xml可以有多个
2.基于注解实现
3.基于配置类实现
启动类,或者任意一个带有@Configuration注解的类都可以是一个配置类
AOP 面向切面编程
Aspect Oriented Programming
可以解决一些侵入代码 如try catch log打印 使得代码更加优雅
安装aop依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Before
@AfterReturning
@After
@AfterThrowing
@Around
全局异常处理器模型