MVC三层架构、Springboot IOC容器以及DI依赖注入

三层架构
在这里插入图片描述

controller:只负责接收请求,响应数据----调用Service层业务

而service只处理业务逻辑,具体数据要通过Dao层获取

Dao将数据返回给Service进行处理,再将结果返回给Controller层,然后响应给前端

控制反转、依赖注入

背景:
在这里插入图片描述
Controller耦合Service,一旦service名称改变,就需要手动去controller层改动代码
解决方案

private EmpService empService = new EmpServiceA();
//1.改为,不能直接用会报空指针异常。
private EmpService empService;

//2.还需把new EmpServiceA()对象放在一个容器里,用到哪个对象就从容器中查询

在这里插入图片描述

问题一

对象如何交给容器管理?

答:控制反转 IOC

对象的创建控制权由程序自身转移到外部容器

问题二

容器如何为程序提供所需要的资源对象?

答:依赖注入 DI

容器为应用程序提供运行时所依赖的资源

在这里插入图片描述

Bean对象

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

如何实现IOC&DI

  1. 将Service层和Dao层的实现类,交给IOC容器管理,成为IOC容器中的bean对象----@Component
  2. 为Controller和Service注入运行时依赖的对象----@Autowired

运行时,IOC容器会提供该类型的bean对象,并赋值给该变量
在这里插入图片描述
在这里插入图片描述
一般使用@RestController、@Service、@Repository在三层上

如果有其他类(不属于这三层,比如:工具类)需要加到IOC容器,这时可以使用@Component

注意:

@Repository(value=“daoB”) //设置EmpDaoB别名
在这里插入图片描述
注意:

  1. 使用@Autowired注解:默认按照类型装配。一个接口只能对应一个IOC容器管理的bean对象。如果有两个,dao—daoA,daoB就会报错,不能完成自动装配
  2. 解决方案:
    在这里插入图片描述
    如果需要存在多个相同的bean----@Primary/@Qualifier/@Resource

@Primary:在其中一个实现类上加,设置这个实现类的优先级先注入,自动注入这个类

@Qualifier:指定bean的名字(spring提供)
在这里插入图片描述
@Resource:指定bean对象。(jdk提供)

  1. @Autowired和@Resource区别
    在这里插入图片描述

Bean组件扫描

1.手动----@ComponentScan,让Springboot能够扫描到(不推荐!!!)

用这个之后需要指定扫描的包,以及启动类所在的包(会覆盖默认的@SpringbootApplication,需要重新指定)

2.把所有类放在启动类所在的包/子包下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值