3.1 SpringBoot Web分层解耦 三层架构:
学习视频链接:Day05-09. 分层解耦-三层架构_哔哩哔哩_bilibili
下面是一个未经过分层解耦的案例(EmpController)
由于整个内容写在一个Controller文件里面,导致其复用性差并且难以维护。但是我们可以对内容分成三部分:数据访问部分,逻辑处理部分,接受响应部分。由此引出三层架构的思想。
三层架构:
![]()
接下来我们将原来的EmpController分成EmpDao,EmpService,EmpController三部分,实现三层架构。
3.2 SpringBoot Web分层解耦 IOC/DI引入:
学习视频链接:Day05-10. 分层解耦-分层解耦(IOC-DI引入)_哔哩哔哩_bilibili
内聚和耦合的定义
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则要求:高内聚低耦合。
分层解耦情景:
上图是前面提到过的controller层的代码。由于新建了一个EmpServiceA对象导致controller层和service层耦合,如果多添加EmpServiceB的业务逻辑,controller就不能只绑定EmpServiceA。下面进行分层解耦来解决这样的问题:
第一步:将new对象删除,仅保留声明
第二步:创建一个容器,容器里面可以存放EmpServiceA,也可以存放EmpServiceB。
第三步:controller访问容器即可
控制反转:InversionOfControl,简称Ioc。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:DependencyInjection,简称Dl。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:loc容器中创建、管理的对象,称之为bean。
3.3 SpringBoot Web分层解耦 IOC/DI入门:
学习视频链接:Day05-11. 分层解耦-IOC&DI-入门_哔哩哔哩_bilibili
@Component:
将当前类交给IOC容器管理,成为IOC容器中的bean - 控制反转
@Autowired:
运行时,IOC容器会提供该类型的bean对象并赋值给该变量 - 依赖注入
3.4 SpringBoot Web分层解耦 IOC详解:
学习视频链接:Day05-12. 分层解耦-IOC&DI-IOC详解_哔哩哔哩_bilibili
关于Component的衍生注解:
Bean组件扫描:
●前面声明bean的四大注解,要想生效,还需要被组件扫描注解@Componentscan扫描。
●@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
3.5 SpringBoot Web分层解耦 DI详解:
学习视频链接:Day05-13. 分层解耦-IOC&DI-DI详解_哔哩哔哩_bilibili
Bean注入:
![]()
三种解决方法:
1.在想要的@Service上面添加@Primary:
![]()
2.在@Autowired上面通过指定bean的value值确定
![]()
3.在容器对象上面通过指定bean的名称确定
![]()
@Resource与@Autowired区别
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
- @Autowired默认是按照类型注入,而@Resource默认是按照名称注入。