栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 中的Dependency Injection 依赖注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 中的Dependency Injection 依赖注入

1.Constructor Injection构造函数注入

TaxReport.java

package com.company;

public class TaxReport {
    private TaxCalculator calculator;

    public TaxReport(TaxCalculator calculator){
        this.calculator = calculator;
    }

    public void show(){
    var tax = calculator.calculateTax();
        System.out.println(tax);
    }
}

把接口TaxCalculator直接写进来:

private TaxCalculator calculator;

    public TaxReport(TaxCalculator calculator){
        this.calculator = calculator;
    }

Main.java

package com.company;

public class Main {
    public static void main(String[] args) {
    var calculator = new TaxCalculator2018(100_000);
    var report = new TaxReport(calculator);
    }
}

var calculator = new TaxCalculator2018(100_000);

var report = new TaxReport(calculator); 

只有两个类,手动引入:POOR Man's dependency injection——需要Spring框架

 

TaxCalculator2018.java

package com.company;

public class TaxCalculator2018 implements TaxCalculator{
    private double taxableIncome;

    public TaxCalculator2018(double taxableIncome) {
        this.taxableIncome = taxableIncome;
    }

    @Override
    public double calculateTax(){
        return taxableIncome*0.3;
    }
}
 2.Setter Injection (Setter注入)

可以改变类在运行时的依赖关系

TaxReport.java添加:

package com.company;

public class TaxReport {
    private TaxCalculator calculator;

    public TaxReport(TaxCalculator calculator){
        this.calculator = calculator;
    }

    public void show(){
    var tax = calculator.calculateTax();
        System.out.println(tax);
    }

    public void setCalculator(TaxCalculator calculator) {
        this.calculator = calculator;
    }
}

添加一个TaxCalculator2019.java

package com.company;

public class TaxCalculator2019 implements TaxCalculator{

    @Override
    public double calculateTax() {
        return 0;
    }
}

Main.java

package com.company;

public class Main {
    public static void main(String[] args) {
    var calculator = new TaxCalculator2018(100_000);
    var report = new TaxReport(calculator);
    report.show();

    report.setCalculator(new TaxCalculator2019());
    report.show();
    
}

3.Method Injection方法注入

TaxReport.java

public void show(TaxCalculator calculator){
var tax = calculator.calculateTax();
    System.out.println(tax);
}

 Main.java

package com.company;

public class Main {
    public static void main(String[] args) {
    var calculator = new TaxCalculator2018(100_000);
    var report = new TaxReport();
    report.show(calculator);

    report.show(new TaxCalculator2019());
    }
}

3种依赖注入方式!

Done! 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号