老师bean注入,为什么要用构造函数形式? 直接注入和构造函数注入有什么区别?

来源:5-11 商户投放子系统 - 商户投放优惠券服务接口实现

jeonsu

2019-01-28

老师bean注入,为什么要用构造函数形式? 直接注入和构造函数注入有什么区别?

写回答

1回答

张勤一

2019-01-28

同学你好:

    关于使用构造函数注入,Spring 文档的说明如下:

The Spring team generally advocates constructor injection as it enables one
to implement application components as immutable objects and to ensure that
required dependencies are not null. Furthermore constructor-injected 
components are always returned to client (calling) code in a fully 
initialized state.

    这里的解释是:能够保证注入的组件不可变,并且确保需要的依赖不为空。此外,构造器注入的依赖总是能够在返回客户端(组件)代码的时候保证完全初始化的状态。

    使用构造函数注入有以下三个特点:

    1. 依赖不可变:其实说的就是final关键字,Java 语言的语法

    2. 依赖不为空(省去了我们对其检查):当要实例化 Bean 的时候,由于自己实现了有参数的构造函数,所以不会调用默认构造函数,那么就需要Spring容器传入所需要的参数,所以就两种情况:1、有该类型的参数->传入,OK 。2:无该类型的参数->报错。所以保证不会为空。

    3. 完全初始化的状态:这个可以跟上面的依赖不为空结合起来,向构造器传参之前,要确保注入的内容不为空,那么肯定要调用依赖组件的构造方法完成实例化。而在Java类加载实例化的过程中,构造方法是最后一步(之前如果有父类先初始化父类,然后自己的成员变量,最后才是构造方法。)。所以返回来的都是初始化之后的状态。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
0

Java分布式后台开发 Spring Boot+Kafka+HBase

从零到一完整搭建企业级架构的通用卡包工程,让你迈到百度T4+ 。

886 学习 · 221 问题

查看课程