Java中的依赖注入

  • 解析表面意思:什么是依赖?可以简单地理解为import引入操作,比如import com.xxx.xxx;什么是注入?可以简单地理解为方法传参,就像给方法A(int temp)传入参数20;依赖注入可以理解为把原本要用import引入的资源,通过方法传参的形式引入,进而实现动态的决定要使用何种资源。这里也可以叫控制反转,就是把决定何种资源的控制权交由外部的使用者决定,也就是调用A(int temp)方法去决定。

其实这里的依赖,不一定是import引入,也可以是对某个对象的引用,比如类A里会用到类B的实例,那么你可能会在类A里去构建一个类B的实例,而依赖注入就是把构建类B的操作通过一个API(容器)对外开发,让外部的使用者去做构建操作,它只要给传一个类B的实例给到类A就可以了。

依赖注入的适用场景之一:当一个类依赖到一个或多个底层资源并且会受到资源影响的时候,使用依赖注入代替直接依赖。否则,当某个底层资源需要移除时,或者需要增加新的资源时,你就不得不修改这个类,这违背“开闭原则”。
举一个例子:
现在有个需求,需要将用户输入的英文内容转化为翻译的其他语言,假设已经引入或创建好多门语言的词典查询类,我可以起个翻译类:

public class LanguageTranslateHelper {
	private static final ChineseWords chineseWords;
	private static final JapaneseWords japaneseWords;
	...
	private LanguageTranslateHelper() {}

	public static String transToChinese(String enStr) {
		chineseWords = new ChineseWords(...);
		return chineseWords.trans(enStr);
	}

	public static String transToJapanese(String enStr) {
		japaneseWords = new JapaneseWords(...);
		return japaneseWords.trans(enStr);
	}

	...
}

使用依赖注入实现:
实现一,假如底层语言库是通过第三方引入的:

public class LanguageTranslateHelper {
	private LanguageTranslateHelper() {}

	public static String transToChinese(String enStr, @NotNull ChineseWords chineseWords) {
		return chineseWords.trans(enStr);
	}

	public static String transToJapanese(String enStr, @NotNull JapaneseWords japaneseWords) {
		return japaneseWords.trans(enStr);
	}

	...
}

实现二,假如底层语言库是自己实现的:

//定义一个接口,ChineseWords JapaneseWords都实现了这个接口
public interface ITranslate {
	String translate(String enStr);
}

public class LanguageTranslateHelper {
	private static final ITranslate words;
	...
	private LanguageTranslateHelper() {}

	public static String transToChinese(String enStr, @NotNull ITranslate words) {
		return words.trans(enStr);
	}
	...
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值