zoukankan      html  css  js  c++  java
  • Spring注入的方式对比


    三种方式

    1.构造方法注入

    为了强制依赖,或者为了易变性,

    2.getter&setter方法

    为了可选或者可变的依赖

    3.反射直接注入到fields@Autowired方式

    尽量避免这样

    public class Controller{

        //通过构造器注入
        private final DependencyA dependencyA;
        private final DependencyB dependencyB;

        @Autowired
        public Controller(DependencyA dependencyA,DependencyB dependencyB){

            this.dependencyA = dependencyA;
            this.dependencyB = dependencyB;
        }

        //通过set方法注入
       private DependencyA dependencyA;   
       private DependencyB dependencyB;

        @Autowired
        public void setDependencyA(DependencyA dependencyA){
            this.dependencyA = dependencyA;
        }

        @Autowired
        public void setDependencyB(DependencyB dependencyB){             
            this.dependencyB = dependencyB;   
        }  

        //通过field注入
        @Autowired
        private DependencyA dependencyA;
        @Autowired
        private DependencyB dependencyB;

    }

    作者:yxktiming
    链接:https://www.jianshu.com/p/36db3e167958
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    属性注入的坏处

    1、你不能使用属性注入的方式构建不可变对象。2、你的类和依赖容器强耦合,不能再容器外使用。3、你的类不能绕过反射(例如单元测试的时候)进行实例化,必须通过依赖容器才能实例化。4、实际的依赖被隐藏在外面,不是在构造方法或者其它方法里面反射的。5、一个类经常会有超过10个的依赖。如果使用构造方法的方式注入的话,构造方法会有10个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

  • 相关阅读:
    离线语音
    云知声语音开发
    自定义View -- 柱状图 我也来自定义个柱状图来玩玩
    android studio中如何替换gradle以防下载卡住
    如何查询当前手机的cpu架构,so库导入工程又出异常了?
    android 学习mvc 和 mvp 和 mvvm参考项目
    【整理】Android中EditText中的InputType类型含义与如何定义( 转 )
    Android点击EditText文本框之外任何地方隐藏键盘的解决办法
    Android开发 adb命令提示:Permission denied (转)
    Node.js-串行化流程控制
  • 原文地址:https://www.cnblogs.com/yuanhailiang/p/9722421.html
Copyright © 2011-2022 走看看