这里写目录标题
- 三层架构
- 简介
- 具体案例
- 原始代码
- DAO层代码
- service层
- controller层
- 总结
- 分层解耦
- 思想
- IOC&DI 入门
- 简介
- 控制反转
- 依赖注入
- IOC详解
- 详细种类
- DI详解
三层架构
简介
具体案例
原始代码
DAO层代码
分别是一个接口实现类以及一个接口,用接口是为了提高程序的灵活性
service层
先是一个接口,之后是接口的实现类(不完整),最后补全了实现类里的一些部分
这里service层是逻辑分析层,并没有数据,需要从Dao层获取数据,所以要面向Dao层的接口创建一个对象,采用多态的方法,左边是接口对象,右边new一个实例化子类,之后利用接口对象去调用功能,这里就用到了刚刚在Dao层写的方法(返回值为一个包含数据的list列表)
controller层
这里需要调用经过逻辑处理之后的数据,所以要面向service层接口创建一个接口对象,new一个实例化子类,之后利用该对象去调用方法,得到返回值,最后响应给前端
总结
分层解耦
思想
之前的分层 层与层之间过于耦合,所以要想办法进行解耦
将接口的实例化子类放入一个容器中,当其他应用程序需要时,为应用程序提供资源。
IOC&DI 入门
简介
控制反转
只需要在实现类上方加上一个注解@Component 即可实现将实现了放入容器中,使之成为容器的bean
具体代码
依赖注入
首先先解除依赖(也就是将”new 实例化子类“删除),之后注入依赖 就是在成员变量上面加一个注解@Autowired,运行时,IOC容器会提供该类型的bean对象,并赋值给该变量
IOC详解
详细种类
注意,controller想要成为bean,只能用自己独有的注解,但是因为@RestController注解以及包括了@Controller注解,所以,无需再加注解
注意要将文件放在启动类所在的包以及子包下
DI详解
@Autowired注解 默认是按照类型进行,但是一但有多个同一类型的bean,将会报错,通过以下几种方案解决,
第一,对想要的bean的IOC注解上加上@Primary注解,用来表示是想要该bean
第二,在@Autowired注解上加上@Qualifier(指定bean的名称,默认是类名首字母小写)
第三,如图