Web开发三层架构

##Controller Service Dao(mapper)

在这里插入图片描述

软件设计:高内聚 低耦合

Controller 调用Service, Service调用 DAO 模块之间耦合
在这里插入图片描述

如果要从EmpServiceA切换到EmpServiceB,Controller代码也要修改

new EmpServiceB
在这里插入图片描述

分层接耦

容器中放EmpServiceA, Controller需要对象去容器中找
如果要将实现类由EmpServiceA 切换为EmpServiceB,可以基于B对象在容器中创建一个对象,即使Service中实现类发生变化,Controller代码也不需要改动

在这里插入图片描述

1.对象怎么交给容器管理

①类交给IOC容器管理,在类上加注解 @Component
在这里插入图片描述

2.容器怎么为程序提供依赖的资源

②Controller需要 empservice对象,给empService加上@Autowired注解

在这里插入图片描述

在这里插入图片描述
此时如果要切换实现类:EmpServiceA 切换到EmpServiceB,将A上面的 //@Component注释掉就可以

保留EmpServiceB上的@Component

Java中的Bean

Controller Service Repository 将对象交给IOC容器管理,默认封装了Component注解

不能用上面三个注解标识,就交给Component,典型的使用场景是工具类

在这里插入图片描述

  • 申明Bean时候,可以通过注解中的value属性指定Bean的名字,没有指定Value属性,Bean名字默认类名首字母小写
  • 在这里插入图片描述

Bean的组件扫描

申明一个Bean,不一定会生效,设计到组件扫描的问题
在这里插入图片描述

在这里插入图片描述

启动类自动加上了组件扫描注解,默认扫描范围是启动类所在包及其子包,如果有些Bean不在这个目录下,启动会失败,b比如dao代码

在这里插入图片描述

在这里插入图片描述

解决方法:自己加上ComponentScan(不推荐)
推荐:将所写的代码全部放到启动类及其子包下面
在这里插入图片描述

依赖注入

  • ① AutoWired

有两个EmpService的Bean,EmpServiceA,EmpServiceB:使用哪个?
程序启动时就报错:

在这里插入图片描述

解决方法:

(1)@Primary 设置优先级,想要哪个Bean生效,就在哪个Bean上加@Primary
在这里插入图片描述

(2)@Autowired配合@Qualifier(“empServiceA”), 加上bean的名字,默认类名首字母小写

Autowired默认按照类型注入

在这里插入图片描述

@Resource默认按照名称注入

jdk提供的
在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值