您的位置:首页 > 编程语言 > Java开发

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

2016-12-17 22:31 447 查看
一,什么是依赖注入?

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

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

1.接口注入

2.set注入

3.构造注入

接口注入:指的就是在接口中定义要注入的信息,并通过接口完成注入。

关于实现接口注入的例子,步骤如下:

(1)编写一个接口IBusiness,各种数据库的注入将通过这个接口进行。

/[b]***********IBusiness.java**********[/b]/

public interface IBusiness{

public void createDI(DataBase db);

}

(2)任何想要使用数据库实例的类都必须实现这个接口,业务逻辑类Business实现这个接口IBusiness

/[b]*******Business.java***********[/b]/

public class Business implement IBusiness{

private DataBase db;

public void createDI(DataBase db){

this.db = db;

}

……

//根据注入的数据库类,从XXX数据库中获取数据

public void getData(){

……

db.getData();

……

}

}

(3)编写测试类TestBusiness

/[b]**********TestBusiness.java******[/b]/

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的注入。

/[b]****Business.java***********[/b]/

public class Business{

private DataBase db;

private void setDataBase(DataBase db){

this.db = db;

}

…….

//根据注入的数据库类,从xxx数据库中获取数据

public void getData(){

…….

db.getData();

……..

}

}

构造注入:构造注入指的就是接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。

为了让类Business接受DataBase的注入,需要为它定义一个构造方法,来接受DataBase的注入。

/[b]****Business*********[/b]/

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()方法,所以不能保证相关的数据成员或资源在执行时不会被更改设定。

什么时候使用构造注入?

如果开发人员想让一些数据成员或资源变为只读或是私有,使用构造注入会是个简单的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring