依赖注入和自动装配的区别(为什么要使用构造方法进行依赖注入)(1)

欢迎关注头条号:Java小野猫

一、前言

我们在使用Spring框架进行开发时,不可避免的要进行依赖注入(Dependency Injection),也就是把实例从Spring容器中取出来进行使用。Spring的依赖注入方式主要有三种,分别为Constructor、Setter和Field。有了选择的余地,令人纠结的地方就来了,这三种方式哪个更好一些呢?

二、注入方式对比

接下来我们逐一看下这三种注入方式:

Field注入

@Autowired private DependencyA dependencyA;

优点

缺点

Setter注入

private DependencyB dependencyB; @Autowired public void setDependencyB(DependencyB dependencyB) { this.dependencyB = dependencyB; }

优点

缺点

Constructor注入

private DependencyC dependencyC; @Autowired public DI(DependencyC dependencyC) { this.dependencyC = dependencyC; }

优点

缺点

三、选择哪种注入方式

Spring官方目前推荐的是构造器注入。根据官方的说法,因为它使人们能够将应用程序组件实现为不可变对象,并确保所需的依赖项不为null。此外,注入构造函数的组件总是以完全初始化的状态返回到客户端(调用)代码。

四、总结

三种方式各有利弊,从靠谱程度来说,还是构造器注入更好一些,它能有效避免一些比如循环依赖、空指针等异常的发生。另外,Spring中Bean默认为单例的,有可能会出现线程安全问题,这个时候final就更有必要了。当然,其他两种方式也有其自己的发光点,我们可以按实际需要选择使用,或混合使用。

欢迎做Java的朋友们私信我【资料】免费获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,很值得大家借鉴和学习,扩展自己的技术广度和知识面。

,