举例说明依赖注入是什么
时间: 2023-07-03 19:33:02 浏览: 151
SQL注入关键字-WEB常见漏洞与挖掘技巧研究
假设有一个类A需要使用类B的功能,如果在A类中直接实例化B类,那么A类和B类之间的依赖关系就会很紧密,难以达到解耦的目的。而使用依赖注入的方式,A类不再直接实例化B类,而是将B类的实例通过构造函数、属性、或者接口等方式注入到A类中。
举个例子,比如一个电商网站需要发送短信验证码,可以使用短信服务商提供的API来实现。在不使用依赖注入的情况下,发送短信验证码的代码可能是这样的:
```
public class SmsService {
public void sendSms(String phoneNumber, String code) {
SmsSender smsSender = new SmsSender();
smsSender.send(phoneNumber, code);
}
}
```
这里的SmsSender是一个实现了短信发送功能的类,但是直接在SmsService类中实例化SmsSender类,会导致SmsService类和SmsSender类之间产生了紧密的耦合关系。如果以后需要更换短信服务商,就需要修改SmsService类的代码。
而使用依赖注入的方式,可以将SmsSender类的实例通过构造函数注入到SmsService类中,代码可能是这样的:
```
public class SmsService {
private ISmsSender smsSender;
public SmsService(ISmsSender smsSender) {
this.smsSender = smsSender;
}
public void sendSms(String phoneNumber, String code) {
smsSender.send(phoneNumber, code);
}
}
```
这里的ISmsSender是一个接口,SmsSender类实现了这个接口,通过构造函数注入的方式将SmsSender类的实例注入到了SmsService类中。这样,SmsService类就不再依赖于具体的短信服务商,可以更加灵活地进行扩展和维护。
阅读全文