《Spring从入门到精通》学习之 依赖注入(DI--Dependency Injection)的3种实现方式

什么是依赖注入:

 

 

Spring 使用DI来实现IoC功能。常用有3种DI注入方式。

接口注入(Interface Injection) Set注入(setter injection) 构造注入(constructor injection)。

 

 

准备工作

定义与要注入的对象和接口。

 

sample用的DB类和接口

①.DataBase 接口

package ch3;

public interface DataBase {

 public void getData();
}

 

②.实现DataBase接口的OracleDataBase 类

package ch3;

public class OracleDataBase implements DataBase {
 @Override
 public void getData() {
  System.out.println("Get Oracle Data");
 }
}

 

③.实现DataBase接口的SqlServerDataBase 类

package ch3;

public class SqlServerDataBase implements DataBase {

 @Override
 public void getData() {
  System.out.println("Get SqlServer Data");
 }
}

 

 

1.接口注入(interface injection)

 

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

具体步骤如下

①.编写一个接口IBuniness,各种数据库的注入将通过这个接口进行。代码如下

package ch3;

public interface IBusiness {

 public void createDI(DataBase db);
}

②.任何想要使用数据库实例的类都必须实现这个接口,业务逻辑类Business实现这个接口IBusiness。代码如下

package ch3;

public class Business implements IBusiness {

 private DataBase db;
 @Override
 public void createDI(DataBase db) {//接口注入
  this.db = db;
 }

 

// 根据注入的数据库,从XXX数据库中取得数据。
 public void getData(){
  db.getData();
 }
}

 

 

3.编写测试类TestBusiness。代码如下

package ch3;
public class TestBusiness {
 private Business business = new Business();

 

// 根据注入的数据库类,从oracle中取得数据库。

 public void getData() {
  business.createDI(new OracleDataBase()); // 注入实际的数据库类型。如要变更式样,只需改变此处即可,达到重用目的。
  business.getData();
 }
}

 

 

如果要完成依赖关系注入的对象,必须实现IBusiness接口。

 

2.Set注入(setter injection)

Set注入指的就是在接受注入的类中定义一个Set方法,并在参数中定义一个需要注入的元素。为了让类Buniess接受DataBase的注入,需要为它定义一个Set方法来接受DataBase的注入。

代码如下

package ch3;

public class Business {


 private DataBase db;

 public void setDataBase(DataBase db) { // set注入
  this.db = db;
 }

 public void getData() {
  db.getData();
 }

}

 

3.构造注入(constructor injection)

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

package ch3;
public class Business {

 

 // Constructor Injection
 private DataBase db;

 public Business(DataBase db) {// Constructor Injection
  this.db = db;
 }

 public void getData() {
  db.getData();
 }
}

 

 

依赖注入或者说是控制反转,说白了就是使用了配置文件,这种思想的唯一好处就是增加了模块的重用性灵活性。

一般配置文件里存的都是数据,键值之类的。Spring的配置文件把要引用类和要给类传的参数都放到配置文件里,这样比以前写死在程序里更灵活,因此更具重用性。

 

依赖注入的意义

 

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

 

Spring 支持Set注入和构造注入。但推荐使用Set注入。

 

 注:

Constructor注入的xml配置

<bean id="helloWorld" class="com.gc.action.HelloWorld">
  <constructor-arg index="0">
    <value>HelloWorld</value>
  </constructor-arg>
</bean>

 

· constructor-arg 通过构造方式来注入参数

· index="0" 表示是构造方法中的第一个参数,如果只有一个参数,则可以不用设置这个属性值。

 

Set注入的xml配置

 <bean id="helloWorld" class="com.gc.action.HelloWorld">
  <property name="msg">
   <value>HelloChina!</value>
  </property>
 </bean>

 

 

按照以上方法配置好后,利用ApplicationContext类来取得xml中配置的bean。方法如下

// 利用ApplicationContext来取得spring的配置文件

   ApplicationContext cx = new
   FileSystemXmlApplicationContext("/WEB-INF/config.xml");-->config.xml的默认路径是工程跟目录。其他路径时则要加上相对路径名。

// 获得配置xml中配置的bean
   HelloWorld hello = (HelloWorld)cx.getBean("hello");
   System.out.println("MSG="+hello.getMsg());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值