Spring入门篇(一)依赖注入

前言

一直使用springMVC做平台开发,没有了解过内部机制,对“面向切面”和“依赖注入”也只是听过名字而已;近期开始研读spring in action,对spring产生了新的理解。现将自己的体会总结下来,此为第一篇。

正文开始

依赖注入
依赖注入用白话来解释就是:以注入的方式来解决依赖导致的高耦合问题。

在任何一个应用中,都会有多个类组成,这些类相互之间进行合作来完成业务逻辑。如果按照传统的做法,一个对象都要管理其所依赖的对象的引用,这将会导致高耦合也不利于功能扩展。举个例子:

public class Robat{
  private Training training ;

  public Robat (){
    this.training = new ReadingTraining();//Robat 与 training类高耦合
  }

  public practise(){
    this.training.practise();
   }
}

我们定义了一个机器人类,这个机器人需要训练,而训练的方法来自于阅读训练这个类中的practice函数。因此,可以看出,robat类依赖于Readingtraining类。导致如果机器人需要训练别的项目,那么需要我们更改代码或者重写,产生很多重复的逻辑。因此spring将这种依赖关系进行转移,不再硬编码般的写入到依赖的类中,而是将其依赖关系交给目标对象,让目标对象去定义依赖关系;在依赖对象中,只去定义一个接口。具体代码如下:

public interface Training (){
  public void practice();
}

public class ReadingTraining implement Training(){
  @Override
  public void practice(){
    print("this is read practice")  
  }
}
public class Robat{
  private Training training;
  public Robat (Training training){
    this.training = trianing;//构造器注入,training类被注入进来  }

  public practise(){
    this.training.practise();
   }
}

上面,我们定义了一个training的接口,因此,我们可以任意更改注入的东西,只要注入的类实现了training接口,使系统具有很高的扩展性。

依赖注入的三种实现方式

1、构造函数注入
这是最简单的注入方式,上面代码所使用的就是构造函数注入。

2、setter注入
同样我们也可以使用set函数进行依赖的注入:

public class Robat{
  private Training training;
  public void setTraining(Training train){
  this.training = train;
}

  public practise(){
    this.training.practise();
   }
}

3、接口注入
接口注入首先需要定义一个接口,接口中定义注入方法,让依赖类实现这个接口。看代码

public interface injectRobat(){
  public void inject(Training training);
}
public class Robat implement injectRobat{
  private Training training;

  @Override
  public void inject(Taining training){
    this.training = training;
}  

  public practise(){
    this.training.practise();
   }
}

你可能感兴趣的:(Spring入门篇(一)依赖注入)