zoukankan      html  css  js  c++  java
  • 依赖注入的三种实现方式?

    依赖注入的三种实现方式?

    一,什么是依赖注入?
    让组件依赖于抽象,当组件要与其他实际对象发生依赖关系时,通过抽象来注入依赖的实际对象。

    二,依赖注入的三种实现方式?
    1.接口注入
    2.set注入
    3.构造注入

    接口注入:指的就是在接口中定义要注入的信息,并通过接口完成注入。

    关于实现接口注入的例子,步骤如下:
    (1)编写一个接口IBusiness,各种数据库的注入将通过这个接口进行。
    /***********IBusiness.java**********/
    public interface IBusiness{
    public void createDI(DataBase db);
    }

    (2)任何想要使用数据库实例的类都必须实现这个接口,业务逻辑类Business实现这个接口IBusiness
    /*******Business.java***********/
    public class Business implement IBusiness{
    private DataBase db;
    public void createDI(DataBase db){
    this.db = db;
    }
    ……
    //根据注入的数据库类,从XXX数据库中获取数据
    public void getData(){
    ……
    db.getData();
    ……
    }
    }
    (3)编写测试类TestBusiness
    /**********TestBusiness.java******/
    public class TestBusiness{
    private Business business = new Business();

    ………
    //根据注入的数据库类,从Oracle数据库中获取数据
    public void getData(){
    …….
    business.createDI(new OracleDataBase());
    business.getData();
    …….
    }
    }
    如果要完成依赖关系注入的对象,必须实现IBusiness接口

    Set注入:指的就是在接受注入的类中定义一个Set方法,并在参数中定义需要注入的元素。
    为了让类Business接受DataBase的注入,需要为它定义一个Set方法来接受DataBase的注入。

    /****Business.java***********/
    public class Business{
    private DataBase db;
    private void setDataBase(DataBase db){
    this.db = db;
    }
    …….
    //根据注入的数据库类,从xxx数据库中获取数据
    public void getData(){
    …….
    db.getData();
    ……..
    }
    }

    构造注入:构造注入指的就是接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。
    为了让类Business接受DataBase的注入,需要为它定义一个构造方法,来接受DataBase的注入。
    /****Business*********/
    public class Business{
    private DateBase db;
    public Business(DataBase db){
    this.db = db;
    }
    …….
    //根据注入的数据库类,从xxx数据库中获取数据
    public void getData(){
    ……
    db.getData();
    …….
    }
    }

    使用哪种注入方式?
    至于使用构造注入或Set注入来完成依赖注入这个问题,一般来说更加推荐使用Set注入,因为构造注入会在建构函数式上留下一长串的参数,且不容易记忆。
    而Set注入可以有明确的名称,可了解注入的对象是什么,像setXXX()这样的名称会比记忆Constructor上某个参数位置代表某个对象更好。
    Set注入的不足:由于提供了setXXX()方法,所以不能保证相关的数据成员或资源在执行时不会被更改设定。
    什么时候使用构造注入?
    如果开发人员想让一些数据成员或资源变为只读或是私有,使用构造注入会是个简单的选择。

    构造器注入,Setter方法注入,接口注入

  • 相关阅读:
    PostGIS解压版安装
    gulp监听文件变化,并拷贝到指定目录
    pre在火狐中不换行
    Undefined symbols for architecture i386: "_crc32", referenced from:
    响应式自动化开发流程-Windows 版
    Gulp入门教程
    SVG折线图
    git-版本控制
    log4j
    CSS:描述样式
  • 原文地址:https://www.cnblogs.com/csk001/p/14223841.html
Copyright © 2011-2022 走看看