美文网首页
属性注入

属性注入

作者: 抬头挺胸才算活着 | 来源:发表于2021-11-03 22:35 被阅读0次

参考资料:
https://stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it

  • 注入方式
    1、构造器
    2、setter或者其他方法
    3、反射

  • 注入方式选择
    1、构造器:强制/不可变依赖
    2、setter:可选/可变依赖
    3、反射注入:尽量避免

  • 注入缺点
    1、不能像构造函数注入一样创建不可变对象
    2、类跟DI容器紧耦合,脱离了DI容器就不能正常运行
    3、单元测试的时候不能单独创建对象(除非用反射),需要使用DI容器,这样就有点像集成测试(多个组件组合测试)了
    4、类的依赖不容易在接口上反应出来,而是通过构造器和方法。
    5、很容易造成有很多依赖,太多的依赖容易违反单一类职责

  • 使用构造器注入的好处
    1、保证依赖不可变
    对象可以定义为final
    2、保证依赖不为空
    不用担心程序启动正常,但是使用过程中因注入对象为空而导致的异常。无法注入时会在启动阶段就直接暴露。
    3、循环依赖??
    很多说法是通过构造器注入的方式能够避免循环依赖,但是我对这种说法不甚赞同。循环依赖并不是缺陷,而是一种特殊的依赖形式,所以“避免循环依赖”在我看来并不能被称为是优点。
    Spring通过三级缓存的方式直接在让用户无感的前提下,解决了setter注入以及filed注入方式下的循环依赖,但是并没有直接处理构造器注入这种方式,我们可以通过@Lazy注解让构造器方式兼容循环依赖。
    3、提升了代码的可复用性
    非IOC容器环境可使用new实例化该类的对象

  • 总结
    属性注入虽然很容易写,但是有很多缺点,因此尽量用构造器注入和少量的setter注入

相关文章

  • springboot之属性注入

    单个属性注入 application.yml 注入单个属性 对象属性注入 application.yml 注入对象...

  • Spring IoC/DI 06-XML 注入 Bean 的属性

    XML 注入 Bean 的属性 注入方式: property注入==set方法注入,指定属性名 construct...

  • 01-struts属性注入

    继承属性 复合属性注入 复合属性注入:接口方式 属性注入: struts.xml方式 struts2利用反射技术将...

  • Bean的常用配置---属性注入

    Spring的属性注入 对于类成员变量,注入方式有三种 构造函数注入 属性setter方法注入 接口注入 Spri...

  • Spring 的属性注入

    Spring 的属性注入 Spring 的属性注入,我们可以理解成之前说过的 DI (依赖注入)。 注入方式 对于...

  • spring提供的三种注入方式

    属性注入 构造函数注入 工厂方法注入 demo项目目录结构 属性注入: 首先新建一个注入的类 然后在resourc...

  • Spring注入形式

    构造器注入构造器注入可以指明index属性位置(0开始),type属性(引用类全称)指明重载构造函数 属性注入 接...

  • TP5的请求对象的属性与方法注入

    1、属性注入:\think\Request::instance()->属性 2、方法注入:\think\Reque...

  • Spring属性注入

    Spring属性注入 构造方法注入 使用设置属性值 Set方法注入 使用set方...

  • Spring AOP注解通过@Autowired,@Resour

    本文介绍了使用spring注解注入属性的方法。 使用注解以前,注入属性通过类以及配置文件来实现。现在,注入属性可以...

网友评论

      本文标题:属性注入

      本文链接:https://www.haomeiwen.com/subject/xdxhzltx.html