2023-11-09 21:35阅读: 136评论: 0推荐: 0

[Spring Boot] - 三层架构及控制反转

三层架构?

Controller : 控制层,接收前端发送的请求,对请求进行处理,并响应数据

Service : 业务逻辑层,处理具体的业务逻辑

Dao : 数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查

NOTE : 通过三层架构的分解, 有利于代码的维护和复用, 同时实现单一代码的单一职责原则, 示例如下:

Controller : 

复制代码
 1 @RestController
 2 public class EmpController {
 3     private EmpService empService = new EmpServiceA();
 4     @RequestMapping("/listEmp")
 5     public Result list() {
 6 
 7         List<Emp> empList = empService.listEmp();
 8         return Result.success(empList);
 9     }
10 }
复制代码

Service : 

复制代码
 1 public class EmpServiceA implements EmpService {
 2     private EmpDao empDao = new EmpDaoA();
 3     @Override
 4     public List<Emp> listEmp() {
 5 
 6         List<Emp> empList = empDao.listEmp();
 7         empList.stream().forEach(emp -> {
 8             ...
 9         });
10         return empList;
11     }
12 }
复制代码

Dao : 

复制代码
1 public class EmpDaoA implements EmpDao {
2     @Override
3     public List<Emp> listEmp() {
4         String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
5         System.out.println(file);
6         List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
7         return empList;
8     }
9 }
复制代码

 

What is 高内聚&低耦合?

传统软件设计的原则是高内聚低耦合, 所谓内聚, 即为软件中各个功能模块内部的功能联系, 而耦合则是衡量软件中各个层/模块之间的依赖、关联的程度. 当一个软件高耦合低内聚时, 带来的是软件复杂性的增加, 及维护成本的升高. 基于此, 控制反转的概念响应而生. 

  1. 控制反转 : Inversion Of Control,简称IOC . 对象的创建控制权由程序自身转移到外部(容器), 这种思想称为控制反转
  2. 依赖注入 : Dependency Injection,简称DI . 容器为应用程序提供运行时,所依赖的资源 , 称之为依赖注入
  3. Bean对象 : IOC容器中创建、管理的对象 , 称之为Bean

Spring Boot中IoC的实现?

1. 将Service层 及 Dao层的实现类 , 交给IOC容器管理

复制代码
@Component //将当前对象交给IOC容器管理,成为IOC容器的bean
public class EmpDaoA implements EmpDao {
    @Override
    public List<Emp> listEmp() {
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
        return empList;
    }
}
复制代码

 要把某个对象交给IOC容器管理, 需要在对应的类上加上如下注解: 

  1. @Component : Inversion Of Control,简称IOC . 对象的创建控制权由程序自身转移到外部(容器), 这种思想称为控制反转
  2. @Controller : Dependency Injection,简称DI . 容器为应用程序提供运行时,所依赖的资源 , 称之为依赖注入
  3. @Service : IOC容器中创建、管理的对象 , 称之为Bean
  4. @Repository : @Component的衍生注解 , 标注在数据访问类上 , 由于与mybatis整合,现在用的比较少了

2. 为Controller及Service注入运行时 , 依赖的对象

1 @RestController
2 public class EmpController {
3     @Autowired
4     @Qualifier("empServiceA")
5     private EmpService empService ;
6     ...
7 }

要把某个对象交给IOC容器管理, 需要在对应的类上加上@Autowired注解,默认是按照类型进行,如果同类型的bean存在多个 , 可通过如下注解解决

  1. @Primary
  2. @Autowired + @Qualifier("bean的名称")
  3. @Resource(name="bean的名称")

3. 代码结构及运行结果参考 GitHub

 

本文作者:MounTain越山

本文链接:https://www.cnblogs.com/13mountain/p/17818100.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   MounTain越山  阅读(136)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起