分层解耦

93 阅读2分钟

分层解耦

1、三层架构

  1. 接受请求、响应数据:controller 控制层
  2. 逻辑处理:service 业务逻辑层
  3. 数据访问:dao 数据访问层(持久层) 负责数据访问操作,包括数据的增删改查

数据访问的方式可能会是:文件中的数据、数据库中的数据、别人的接口的数据等

流程:

  • contrller接收请求,传给service
  • service层接收到处理的请求时,需要用到数据,所以去调用dao
  • dao去拿数据给service,service拿到数据以后进行逻辑处理,处理结果再给controller
  • controller响应

有点像买东西:

{

1、听顾客需求

2、包装

3、取货

4、提供商品

}

2、分层解耦

内聚:软件各个功能模块内部的功能联系;

耦合:衡量软件中各个层/模块之间的依、关联的程度。

软件设计原则:高内聚低耦合

控制反转:简称IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转

依赖注入 :简称DI,容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

Bean对象:IOC容器中创建、管理的对象,称之为bean

3、IOC&DI入门

完成controller层、service层代码的解耦;把new的对象都给删除掉;

  1. service层及dao层的实现类交给IOC容器管理
  2. 为controller及service注入运行时,依赖的对象

为dao、service中添加@Component注解,实现第一步;(在类上面添加)

为service、controller中添加@Autowired注解,实现第二步;(在变量上面添加)

通过注释打开@Component来实现解耦,切换类对象

4、IOC详解

  • Bean四大注解:

image.png

为dao、service层更新注解;在controller层为Restcontroller注解做注释

/**
 * @RestController注解:
 * @RestController可以理解成@ResponseBody + @Controller
 */
  • Bean组件扫描:

    • 想要生效bean四大注解,还需要被组件扫描注解@ComponentScan扫描,@ComponentScan注解虽然没有显示配置,但是,实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。

5、DI详解:

1、依赖注入的注解:

  • @Auotowired:默认按照类型自动装配

  • 如果同类型的bean存在多个:

    • @Primary:位置是在当模块/功能,类上面
    • @Autowired + @Qualifier("bean的名称"):位置在controller层,,类中方法外
    • @Resource(name="bean的名称"):位置在controller层,类中方法外

6、面试题:@Resource与@Autowired的区别:

  • @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
  • @Autowired默认是按照类型注入,而@Resource默认是按照名称注入的。