全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring学习之依赖注入的方法(三种)

spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。今天就和大家一起来学习一下

依赖注入的基本概念

依赖注入(Dependecy Injection),也称为IoC(Invert of Control),是一种有别于传统的面向对象开发的思想,主要用于对应用进行解耦。简单的理解就是说,本来是由应用服务自己创建的对象,数据,交给第三方来负责创建,准备,并且由第三方将对应的内容注入到应用服务中来,从而实现了对象的创建于对象的应用之间的解耦,通过这种方式,应用服务可以最小程度地减少与对象实体之前的关联(只需要使用即可,而不关心其来源,对应的实现等等),从而保持了应用服务与对象之间的弱耦合关系。

依赖注入的简单实现

可能通过文字的表达,对于依赖注入不是很好理解,不过,通过简单的代码实现,就可以很轻松的理解了,下面通过原始的做法以及依赖注入的做法来进行对比,来加深对依赖注入的理解

/**
* 日志服务
*/
class LogService{

  // 注意这里,这里是手动创建对应的LogDao实例对象
  private LogDao logDao = new DBLogDao(); 

  public void save(){
    logDao.save();
  }
}

/**
* 日志DAO接口
*/
interface LogDao{

  void save();
}

/**
* 日志DAO的具体实现,将日志保存到数据库中
*/
class DBLogDao implements LogDao{

  @Override
  public void save() {
    System.out.println("Save to Database");
  }
}

从上面的代码中可以看到,当需要LogDao对象的时候,是直接在服务中创建具体的实现,也就是new DBLogDao(),这种方式虽然方便,但是存在一定的缺点,比如说,当想要切换对应的实现,比如说XMLLogDao的时候,就需要打开对应的代码,创建XMLLogDao对象,并且将其交给LogService;而且,如果LogDao的创建过程比较繁琐的时候,LogService在这种实现方式中,就需要知道LogDao的实现过程,而这显然是不太合理的,因为LogService只需要知道LogDao的存在,以及使用方式即可,而并不需要知道它的创建过程。

接下来来看下依赖注入或者说控制反转是怎么解决这些问题的。

class LogService{

  // 注意这里,这里并没创建对应的对象
  private LogDao logDao;

  // 通过属性将LogDao注入到LogService中,这也就是依赖注入的来源
  // 依赖别人讲所需要的对象注入进来
  public void setLogDao(LogDao logDao) {
    this.logDao = logDao;
  }

  public void save(){
    logDao.save();
  }
}

// LogDao接口及其实现DBLogDao同上,这里省略

/**
* 模拟的容器类,负责创建各个对象,并且将对应的依赖对象注入进去
*/
class Container{

  public void create(){

    // 创建对象
    LogService logService = new LogService();
    LogDao logDao = new DBLogDao();

    // 注入LogDao对象
    logService.setLogDao(logDao);
  }
}

可能这里你会觉得说,create方法中也是手动创建了DBLogDao对象,其实不然,对于create方法来说,它只是负责创建对象,并不管对象的用途,也就是说,这里create方法可以通过各种其他手段,比如利用反射技术,再通过配置文件来配置对应的类的信息,这样,当需要修改具体的实现的时候,只需要修改配置文件,create就会创建对应的对象,并且将其注入到LogService中,而这个过程对于LogService来说是透明的,LogService只知道自己有一个LogDao的对象,而不知道,也不需要知道LogDao对象是怎么来的。也就是实现了创建与使用的解耦。

至于控制反转名词,其实也是很显然的嘛,本来是LogService自己创建的对象,现在将其交给Container来创建了,那么创建对象的权限不就是反转了嘛^_^

一般来说,依赖注入有三种方式,分别是属性注入,也就是上面我们看到的内容,还有一种是构造器注入,也就是通过构造器注入对应的对象,还有一种不常用的接口注入,其实本质上也是属于属性注入。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Spring  # 依赖注入  # 依赖注入的方法  # Spring自动装配之方法、构造器位置的自动注入操作  # Java spring的三种注入方式详解流程  # Spring三种方法的注解自动注入问题  # 将其  # 是怎么  # 而不  # 只需要  # 第三方  # 配置文件  # 实现了  # 就会  # 也不  # 很好  # 是一种  # 你会  # 不太  # 是由  # 只需  # 这也  # 可以通过  # 在这种  # 可以看到  # 三种 


相关文章: ,购物网站怎么盈利呢?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何使用Golang安装API文档生成工具_快速生成接口文档  高端建站如何打造兼具美学与转化的品牌官网?  网站制作话术技巧,网站推广做的好怎么话术?  定制建站策划方案_专业建站与网站建设方案一站式指南  宝塔新建站点报错如何解决?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  宝塔建站无法访问?如何排查配置与端口问题?  广州建站公司哪家好?十大优质服务商推荐  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  如何快速打造个性化非模板自助建站?  如何设置并定期更换建站之星安全管理员密码?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何续费美橙建站之星域名及服务?  ,网站推广常用方法?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  Bpmn 2.0的XML文件怎么画流程图  如何通过商城免费建站系统源码自定义网站主题?  如何在IIS中新建站点并解决端口绑定冲突?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何通过二级域名建站提升品牌影响力?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何快速登录WAP自助建站平台?  建站之星如何一键生成手机站?  简单实现Android文件上传  如何通过智能用户系统一键生成高效建站方案?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  已有域名和空间如何快速搭建网站?  建站之星如何保障用户数据免受黑客入侵?  做企业网站制作流程,企业网站制作基本流程有哪些?  开封网站制作公司,网络用语开封是什么意思?  如何在建站主机中优化服务器配置?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在万网主机上快速搭建网站?  全景视频制作网站有哪些,全景图怎么做成网页?  如何通过PHP快速构建高效问答网站功能?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何在阿里云服务器自主搭建网站?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  建站之星价格显示格式升级,你的预算足够吗?  建站10G流量真的够用吗?如何应对访问高峰?  西安大型网站制作公司,西安招聘网站最好的是哪个?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  ,如何利用word制作宣传手册?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  油猴 教程,油猴搜脚本为什么会网页无法显示? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。