• IntelliJ IDEA:Field injection is not recommended


    使用IntelliJ IDEA进行开发的时候,code analyze的时候会出现提示“Field injection is not recommended”。

    stackoverflow上有篇回答:http://stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it

    国外有篇文章:http://vojtechruzicka.com/field-dependency-injection-considered-harmful/

    spring官方文档:http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/beans.html

    依赖注入方式:

    1、通过构造方法

    2、通过setters或者其它方法

    3、通过反射直接注入到fields

    一般的@Autowired就是通过第三种方式

    注入的指导方针:

    1、为了强制依赖,或者为了易变性,使用构造方法注入

    2、为了可选的或者可变的依赖,使用setter注入

    3、尽量避免使用直接在属性上注入

    属性注入的坏处:

    1、你不能使用属性注入的方式构建不可变对象。

    2、你的类和依赖容器强耦合,不能再容器外使用。

    3、你的类不能绕过反射(例如单元测试的时候)进行实例化,必须通过依赖容器才能实例化,这更像是集成测试。

    4、实际的依赖被隐藏在外面,不是在构造方法或者其它方法里面反射的。

    5、一个类经常会有超过10个的依赖。如果使用构造方法的方式注入的话,构造方法会有10个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

    总结:

    尽量避免使用属性注入,虽然非常方便。

  • 相关阅读:
    mixin混合
    python类内部调用自己的成员函数必须加self
    合并/取消合并单元格
    pandas 显示所有的行和列
    pandas 利用openpyxl设置表格样式
    Nowcoder9983G.糖果(并查集)
    Nowcoder9983F.匹配串(思维)
    Nowcoder9983E.买礼物(链表+线段树)
    Nowcoder9983C.重力追击(暴力+少用sqrt)
    Nowcoder9983B.内卷(双指针)
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6790754.html
Copyright © 2020-2023  润新知