论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
分层解耦、IOC和DI
分层解耦、IOC和DI
莫张周刘王
金牌会员
|
2023-8-3 19:28:14
|
显示全部楼层
|
阅读模式
楼主
主题
943
|
帖子
943
|
积分
2829
学习教程:【黑马程序员2023新版JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)】
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=161&share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e0549e
分层解耦
三层架构
在进行软件设计和软件开发时,需要让每个接口、类或方法的职责更加单一,即
单一职责原则
。基于此在Web开发中就有了三层架构。
Controller层:
控制层,接收前端发送的请求,对请求进行处理,并响应数据。
Service层:
业务逻辑层,处理具体的业务逻辑。
Dao层:
数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增,删,改,查。
个人理解:
由Controller层接受请求,然后向Service层拿需要响应的数据,Service层又向Dao层获取原始数据,Dao层就从数据源获取数据,然后返回给Service层,Service层再对原始数据进行逻辑处理,将处理好的数据再返回给Controller层,Controller层再将这个拿到的处理好的数据响应给请求方。这样三层,每一层负责各自的职业,提高了代码复用性,利于维护和扩展,分层解耦。
分层解耦
内聚:
软件中各个功能模块内部的功能联系。
耦合:
衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:
高内聚、低耦合。
控制反转:
Inversion Of Control,简称
IOC
。
对象创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
Spring就是使用IOC思想,通过使用反射机制,帮我们实例化并放进容器中,由容器来管理。
依赖注入:
Dependency Injection,简称
DI
。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:
IOC容器中创建、管理的对象,称之为
bean
。
个人理解:
通过控制反转让容器管理对象,我们只需要设计好类,对象的实例化和存放交给容器,容器再通过依赖注入将程序需要的对象给程序。通过这种方式可以降低各个模块之间的耦合,不需要在模块中再实例化其他模块的对象。
IOC详解(SpringBoot)
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
注解说明位置@Component声明bean的基础注解一般不属于以下三类时,用此注解@Controller@Component的衍生注解标注在控制器类(Controller层)@Service@Component的衍生注解标注在业务类上(Service层)@Repository@Component的衍生注解标注在数据访问类上(Dao层)(由于与mybatis整合,用的少)
注意事项:
声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
@Repository("daoA")
使用以上四个注解都可以声明bean,但是在SpringBoot集成开发web开发中,声明控制器bean只能用@Controller。
Bean组件的声明
前面声明的四大注解,要想生效,还需要被组件扫描,注解@ComponentScan扫描。
@ComponentScan注解 虽然没有显示配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描范围是启动类所在包及其子包,也可以通过@ComponentScan的value和basePackages属性手动指定扫描范围,但是一般不手动指定。
DI详解(SpringBoot)
@Autowired注解,默认是按照类型进行自动装配,如果存在多个相同类型的bean,将会报错。
可以通过以下几种方案来解决:
@Primary:
如果有多个相同类型的bean对象,可以通过改注解设置优先级,有该注解的优先生效。
@Autowired + @Qualifier("bean的名称"):
通过该注解,()中填入bean对象名称,可以指定需要的bean对象,需要配合@Autowired使用。
@Resource(name = "bean的名称"):
按照bean名称进行注入,指定需要注入的bean对象,不需要@Autowired。
@Resource 与 @Autowired 区别
@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解。
@Autowired 默认是按照类型注入,而@Resource 是默认按照名称注入。
弹幕引用:
注意,并不是只按照类型或者名字,是先按照什么找,找不到再按照什么找,而这里的名字和类型都是以你注入的地方的变量名和变量类型开找;
Resource如果不写name属性则是按照类型注入哈;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莫张周刘王
金牌会员
这个人很懒什么都没写!
楼主热帖
06、etcd 写请求执行流程
软件测试项目实战经验附视频以及源码【 ...
网上书店管理系统项目【Java数据库编程 ...
【云原生】三、详细易懂的Docker 容器 ...
四、WinUI3下TitleBar的自定义
如何用同一套账号接入整个研发过程? ...
面向大规模神经网络的模型压缩和加速方 ...
c# sqlsugar,hisql,freesql orm框架全 ...
物联网5种无线传输协议特点大汇总 ...
MySQL用户和权限管理
标签云
存储
服务器
浏览过的版块
数据仓库与分析
快速回复
返回顶部
返回列表