首页 > 其他分享 >3.分层解耦

3.分层解耦

时间:2023-11-24 17:58:08浏览次数:21  
标签:Autowired Component bean ComponentScan 分层 注解 IOC

分层解耦

三层架构:

  • controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据;
  • service:业务逻辑层,处理具体的业务逻辑;
  • dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查;

分层解耦思想:

  • 内聚:软件中各个功能模块内部的功能联系;
  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度;
  • 软件设计原则:高内聚低耦合;

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

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

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

IOC&DI:

步骤:

  1. Service层及Dao层的实现类,交给IOC容器管理;
    • 为该类添加@Component注解;
  2. 为Controller及Service注入运行时,依赖的对象;
    • 为需要依赖的对象添加@Autowired;
  3. 运行测试;

IOC详细:

Bean的声明:
概念:

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一(一般用后三个):

注解 说明 位置
@Component 声明bean的基础注解 不属于以下三类时,用此注解
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务/逻辑类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)
@RestController 将数据以 JSON 或 XML 等格式返回给客户端 标注在控制器类上

注意事项:
  • 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写;

    • @Repository(value="daoA")	或	@Repository("daoA")
      
  • 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller;

  • @RestController = @Controller + @ResponseBody;

Bean组件扫描:
  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描;

  • @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包;

  • 使用ComponentScan注解,可以通过value属性指定扫描的包,是一个数组;

    • @ComponentScan(value={"dao","com.caihongjia"})	或	@ComponentScan({"dao","com.caihongjia"})
      

DI详细:

依赖注入的注解:
  • @Autowired:默认按照类型自动装配;
  • 如果同类型的bean存在多个:
    • @Primary写在需要依赖的对象中的javabean类上
    • @Autowired + @Qualifier("bean的名称");
    • 用@Resource(name = "bean的名称")代替@Autowired;
@Resource与@Autowired区别:
  • @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解;
  • @Autowired默认是按照类型注入,而@Resource默认是按照名称注入;

标签:Autowired,Component,bean,ComponentScan,分层,注解,IOC
From: https://www.cnblogs.com/chj020415/p/17853673.html

相关文章

  • 网络分层 http,https,arp
    目录网络分层分层OSI七层协议数据上下变化其它模型设备http常见状态码TCPKeep-Alive和HTTPKeep-Alivehttp1.0->1.1->2.0->3.0http1.0http1.1http2.0http3.0whyquic?流量控制拥塞控制重传SACK机制校验和重排序优势网页解析流程......
  • [数仓设计与建模] 数仓的分层
    以下各层按照从底部到顶部排列,从原始数据到最终应用1OperationDataStore原始数据层存放最原始的数据,结构与数据源结构一致,属于准备区基于从业务系统同步过来的数据结构可以保存所有历史数据,应选择高压缩格式,如gzip命名规则应为ods_tableName_inc/full2aDataWarehous......
  • 专题:分层图
    专题:分层图拖了整整一个月,我终于来学习分层图了,原因是考一道USACO的题正解死分层图,秉持着竟然有用,那我就来学学的原则,学习了分层图。纵然,这确实是个好东西,但是局限性也比较明显,分层图的分层的意思是把图整体复制几遍,跨层走意味着使用了一次特殊机会。但是,显然这对数据范围......
  • [图论]-分层图最短路
    引言——“分层图最短路”顾名思意,可以知道是在分层的图上跑最短路得算法。当我开始学习这个算法是,看到这个算法名,总有些雨里雾里的。什么是分层,为什么要分层,怎么分层?概念概念:分层图最短路的模型就是在最短路模型的基础上加上$k$个决策。这$k$个决策,并不会影响图得结构,只影......
  • SpringBoot数据响应、分层解耦、三层架构
    响应数据@ResponseBody类型:方法注解、类注解位置:Controller方法、类上作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为json格式响应说明:@RestController=@Controller+@ResponseBody统一响应结果步骤:获取员工数据,返回统一响应结果,在页面渲染......
  • JAVA-EE在不使用MVC分层的情况下用一个servlet完成转账业务------Java-Web项目
    在不使用MVC分层的情况下用一个servlet完成转账业务packagecom.bjpowernode.Bank.servlet;importcom.bjpowernode.Bank.exception.AppException;importcom.bjpowernode.Bank.exception.MoneyNotEnoughException;importcom.bjpowernode.oa.utils.DBUtil;importjakarta.ser......
  • 数智化推送助力用户精准分层,MobPush是如何实现用户价值变现的
    随着移动设备普及,移动应用市场日益趋于饱和,传统的拉新促活、提升APP用户数,利用庞大的用户流量带来的广告收入、第三方合作等方式实现价值变现的路径已越来越窄,拉新促活成本的高企不下进一步限制了这种价值增长方式的可行性。因此,如何通过精准的用户分层,识别潜在的高价值、高粘度、......
  • Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
     全文链接:https://tecdat.cn/?p=33961原文出处:拓端数据部落公众号在常规的马尔可夫链模型中,我们通常感兴趣的是找到一个平衡分布。MCMC则是反过来思考——我们将平衡分布固定为后验分布:并寻找一种转移核,使其收敛到该平衡分布。岛屿示例首先提供一个示例,以具体展示Metropo......
  • 应用系统-业务逻辑写入在分层结构中Service层
    应用系统-业务逻辑写入在分层结构中Service层      近日,关于我们某同学在研发过程中一些设计问题,再次回归老生常谈的问题:业务逻辑写在哪儿一层?过去二十年软件开发过程中,大部分开发者喜欢使用存储过程(SP),用SP解决一系列业务处理过程,在信息系统中时常听到有SP的存储。各大......
  • 【虹科干货】Redis Enterprise 自动分层技术:大数据集高性能解决方案
    越来越多的应用程序依赖于庞大的数据集合,而这些应用程序必须快速响应。借助自动分层,RedisEnterprise7.2帮助开发人员轻松创建超快的应用程序。何乐而不为?Redis将数据存储在内存中,因此应用程序能以最快的速度检索和处理数据。然而,随着应用程序需要处理的数据越多,存储数据集所需的......