Spring官网:spring.io
1.spring 2.SprinMVC 3.Maven高级 4.SpringBoot 5.MyBatisPlus
为什么要学Spring?
简化开发,降低企业级开发的复杂度
框架整合,高效整合其他技术,提高企业级应用开发与运行效率
Spring 系统架构
![](https://i-blog.csdnimg.cn/blog_migrate/cf7ba0d1105d8bb8131b07ae458c23a6.png)
IOC(Inversion of Control)控制反转:对象的创建控制权由程序转移到外部
解决什么问题?--> 代码耦合度高
解决方案:使用对象时,在程序中不主动使用new产生对象,转换为由外部提供对象
![](https://i-blog.csdnimg.cn/blog_migrate/8a742779fc96c674a5530acaab8efe9a.png)
目标:充分解耦
使用IoC容器管理Bean(IoC)
在IoC容器内将有依赖关系的bean进行关系绑定(DI)
最终效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系
IoC案例思路分析
管理什么?(Service与Dao)
如何将被管理的对象告知IoC容器?(配置)
被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
IoC容器得到后,如何从容器中获取bean?(接口方法)
使用Spring导入哪些坐标?(pom.xml)
Bean
bean基础配置:id,name别名,class类别,scope作用范围
bean实例化的4种方法:构造方法(常用),静态工厂,实例工厂与FactoryBean(实用)
bean生命周期:
![](https://i-blog.csdnimg.cn/blog_migrate/3a5cdaaa5af6352ba36e90ce24b7a605.png)
生命周期控制:
(1)使用配置的方式:
init-method,destroy-method 容器关闭前触发bean的销毁
关闭容器:1,ctx.close();较为暴力 2,ctx.registerShutdownHook();关闭前的钩子
![](https://i-blog.csdnimg.cn/blog_migrate/bc85d17e89934b2dabff69d832d1de80.png)
(2)使用接口的方式:
接口:InitializationBean,DisposableBean
方法:afterPropertiesSet(),destroy()
依赖注入(4)
setter注入:
引用数据类型:ref;
简单类型(基本数据类型和string):使用property标签value属性;
构造器注入:
引用类型:
<constructor-arg name="bookDao" ref="bookDao">
简单类型:
<constructor-arg name="databaseName" value="mysql">
依赖注入方式选择:
![](https://i-blog.csdnimg.cn/blog_migrate/b47cbf1c210fa32147f4d0a114b5d02b.png)
自动装配
![](https://i-blog.csdnimg.cn/blog_migrate/60580c341cc47040b9c5aecbf86b2363.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8ba4967b62f8a207566571e73eeaeb1.png)
集合注入
数组,List,Set,Map,Properties
通过Properties文件加载:
![](https://i-blog.csdnimg.cn/blog_migrate/225b17f1c88609eb9b300e244cd316d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9cc18772b52dec978e3f600babc83356.png)
总结:
![](https://i-blog.csdnimg.cn/blog_migrate/341070de2985f3cdba0e5b01b9f22fdb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fd387cde02415bcb86e9f60d5e56bf09.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c47aab2d91a83a4d81fc6580691bf327.png)
注解开发
注解开发定义Bean:
![](https://i-blog.csdnimg.cn/blog_migrate/22220bf3fa79a18cd3f64caf4c145ff6.png)
纯注解开发:
![](https://i-blog.csdnimg.cn/blog_migrate/436030c466f43909d9e10dc7f4751a64.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c637ec125c9e1cb9151a465d94260de9.png)
XML配置与注解配置对比
![](https://i-blog.csdnimg.cn/blog_migrate/aec894a214ede9b70d3fa8db5aa97afe.png)
Spring整合Junit:
![](https://i-blog.csdnimg.cn/blog_migrate/40ed4cf1ae79e80adfb687c02a509ba1.png)