美文网首页
Spring入门篇(一)依赖注入

Spring入门篇(一)依赖注入

作者: 蔺相如如 | 来源:发表于2018-01-26 14:35 被阅读0次

    前言

    一直使用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入门篇(一)依赖注入

          本文链接:https://www.haomeiwen.com/subject/rnniaxtx.html