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个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

  • 相关阅读:
    Java抓取网页数据(原网页+Javascript返回数据)
    jvm调优
    Windows系统下nodejs安装及配置
    《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS
    数据结构与算法一
    Oracle Hints具体解释
    hibernate-4.3.5安装配置
    linux-多线程
    利用JasperReport+iReport进行Web报表开发
    linux下tar.xz 文件解压
  • 原文地址:https://www.cnblogs.com/yuanhailiang/p/9722421.html
Copyright © 2011-2022 走看看