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

    总结:

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

  • 相关阅读:
    JDK1.8-Stream API使用
    JDK1.8-Collectors方法介绍
    SpringBoot程序启动原理及自动化配置的原理
    SpringBoot之spring.factories
    Spring注入Bean的几种方式
    SpringBoot+Security+JWT实现单点登录
    SpringCloudConfig + CloudBus + WebHooks +RibbitMQ,实现配置集中管理和自动刷新
    SpringBoot的WebMvcConfigurer介绍
    Spring 事务的理解
    4-1 自动生成spider模板的命令
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6790754.html
Copyright © 2011-2022 走看看