耦合
在软件系统中,层与层之间存在依赖关系,我们称之为耦合。
我们系统架构设计的一个原则是:高内聚低耦合。层内部的组成应该是高度聚合的,而层与层之间的关系应该是低耦合的。
在上一篇中我们引入了三层架构,原代码是这样的:
![图片[1]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/967bf670b47209c58fa8df4fd2b9464-1024x586.png)
![图片[2]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/21bcb1a3e2dd49fbd6fb9e2d512069d.png)
![图片[3]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/60628a41104ead62cafd209105d6de7.png)
![图片[4]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/1666406164420.png)
可以看出Controller层与Service层,Service层与Dao层存在着耦合。
解耦
1. 首先先在applicationContext.xml中配置依赖关系
![图片[5]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-72.png)
![图片[6]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/934bfd159f7e435706e6fd1237d5158.png)
![图片[7]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/13c00082624c881991189e5860a89e7.png)
2. 创建接口BeanFactory,然后创建ClassPathXmlApplicationContext实现BeanFactory并重写getBean方法。
![图片[8]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-73-1024x394.png)
![图片[9]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/0c8ceed29289997d5946257372dc3f4.png)
3. 将DispatcherServlet中解析applicationContext.xml获取bean的代码移到ClassPathXmlApplicationContext中。
![图片[10]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-74-1024x586.png)
![图片[11]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-75-1024x710.png)
4. 根据xml配置组装依赖关系
![图片[12]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-76-1024x631.png)
5. 对DispatcherServlet进行代码优化,将原先解析xml获取bean改为从BeanFactory获取。
![图片[13]-手写简易MVC – IOC-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-77-1024x670.png)
总结
原先代码中,依赖关系是程序员主动获取的,bean的生命周期由程序员来控制(因为java虚拟机的存在,不用我们考虑)。
代码优化后,程序的依赖关系由容器来帮我注入进去,生命周期的控制权也从程序员转移到了BeanFactory中。
这便是控制反转(IOC)与依赖注入(DI),在后面的Spring框架章节,还会对这一块深入学习。
© 版权声明
THE END
暂无评论内容