spring属性的注入为什么不支持接口注入

来源:互联网 发布:app理财软件 编辑:程序博客网 时间:2024/06/05 15:48

最近在学习的时候突然想到这个问题,那么为什么spring就不支持接口注入呢?

首先,我们来看下属性的注入方式有三种:
1. set方法(重点)

    public class User{    private String name;    public void setName(String name){        this.name=name;        }    }    User user=new User();    user.setName("shenxuebing");

2.有参数的构造(不常用)

    public class User{    private String name;    public void setName(String name){        this.name=name;        }    }    User user=new User("shenxuebing");

3.使用接口注入(spring不支持)

    public interface Dao{    public void add(Stirng name);    }    public class DaoImpl implements Dao{    private Stirng name;    public void add(String name){        this.name=name;        }    }

其次,在软件设计有个规则,相信每个程序猿都听过,那就是“高内聚,低耦合”。什么意思呢?请见我的另一篇文章《高内聚低耦合》。简单来说要想实现接口注入,那就得实现这个接口的方法,这样就造成了耦合度高,不利于程序的拓展性。这不是最好的初衷。

最后,我们抛开耦合度高来看下接口注入。在接口注入过程中,我们在实现接口的类中也要定义要赋值的变量,然后实现属性的注入。

private Stirng name;    public void add(String name){        this.name=name;        }

大家想一想这段代码是不是似曾相识,对!,那就是用set方法注入,这不就是换了个名字而已吗?为何要那么费劲的要实现个接口来进行属性注入呢?本身就是set注入,然后又非要加个接口来实现这个功能,这样就多此一举了。而且还造成了耦合度高。这样为了降低耦合度,方便简洁,所以spring不支持接口的属性注入。

欢迎大佬前来指点迷津,小弟有什么说的不对的地方多多指出,小弟不胜感激。

原创粉丝点击