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

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

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

二,依赖注入的三种实现方式?
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方法注入,接口注入

原文地址:https://www.cnblogs.com/csk001/p/14223841.html