【spring】spring的非侵入性体现之依赖注入

写在前面:

如果你用过java的其他框架,比如EJB、structs、webwork、tapestry等,你可能经常会遇到需要继承框架提供的类或者实现框架提供的接口来实现功能,这种方式通常会导致应用与框架绑死。也就是我们经常讲的框架入侵性太强。导致应用代码几乎无法复用。

spring如何提供其框架的能力

那么spring如何在提供其框架能力的同时,又做到不入侵应用呢?

1.依赖注入

什么是依赖注入?
先来看一个例子

package com.springinaction.knights;
public class DamselRescuingKnight implements Knight {
	private RescueDamselQuest quest;
	public DamselRescuingKnight(){
		this.quest = new RescueDamselQuest();
	}
	public void embarkOnQuest(){
 		quest.embark();
	}
}

这里我们看到DamselRescuingKnight在其构造函数中自行创建了RescueDamselQuest,使得DamselRescuingKnight紧密耦合于RescueDamselQuest,实际上就限制了这个类的“能力”

耦合具有两面性
一方面,耦合的代码难以测试、难以复用、难以理解。并且容易出现“打地鼠”式的bug特性。修了一个bug,又出现一个新的bug。
另一方面,耦合又是必须的,完全不耦合的代码实现不了大多数功能。函数式编程除外。
如何合理耦合
通过DI(依赖注入)
在这里插入图片描述

依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己去获取依赖。

我们来看之前例子如何改写成DI方式

package com.springinaciton.knights;
public class BraveKnight implements Knight {
	private Quest quest;
	public BraveKnight(Quest quest){
		this.quest = quest;
	}
	public void embarkOnQuest(){
		quest.embark();
	}
}

这里我们看到和之前的区别是
BraveKnight没有自行创建RescueDamselQuest,而是把RescueDamselQuest做作为构造器参数传入,这是依赖注入的方式之一。即构造器注入
更重要的是,传入的是Quest,而不是RescueDamselQuest,也就是说我们的BraveKnight能够响应各种类型的Quest。

在spring中如何使用
这里我们引出装配(wiring)的概念
装配就是把有咱们写好的类,根据业务逻辑给搭配使用起来。
即通过一个第三方来协调和管理有相互依赖的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴姬压酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值