java spring依赖注入方式有哪几种?有什么区别?

BSO 2020-09-30 16:09:35 java常见问答 5593

在java的日常学习过程中会发现java的知识点是极其复杂和庞大的,没有谁能完全地掌握它,因为它一直都在更新进步。今天就来为大家介绍一些与java知识有关的问题,也就是java spring依赖注入方式有哪几种以及有什么区别呢?一起来看看吧。

一、首先说一下依赖注入的方式

1.通过构造器来注入;

2.通过setter方法来注入;

3.通过filed变量来注入;

分别通过实例代码进行展示。

1.Constructor,代码展示如下:

private DependencyA dependencyA;
private DependencyB dependencyB;
private DependencyC dependencyC;
@Autowired
public DI(DependencyA dependencyA, DependencyB dependencyB, DependencyC dependencyC)
{
    this.dependencyA = dependencyA;
    this.dependencyB = dependencyB;
    this.dependencyC = dependencyC;
}

2.Setter,代码展示如下:

 private DependencyA dependencyA;
 private DependencyB dependencyB;
 private DependencyC dependencyC;
 @Autowired
 public void setDependencyA(DependencyA dependencyA)
 {
     this.dependencyA = dependencyA;
 }
 @Autowired
 public void setDependencyB(DependencyB dependencyB)
 {
     this.dependencyB = dependencyB;
 }
 @Autowired
 public void setDependencyC(DependencyC dependencyC)
 {
     this.dependencyC = dependencyC;
 }

3.Field,代码展示如下:

@Autowired
private DependencyA dependencyA;
@Autowired
private DependencyB dependencyB;
@Autowired
private DependencyC dependencyC;

二、那么它们之间有什么区别呢?

1.基于constructor的注入,会固定依赖注入的顺序;该方式不允许我们创建bean对象之间的循环依赖关系,这种限制其实是一种利用构造器来注入的益处。当你甚至没有注意到使用setter注入的时候,spring能解决循环依赖的问题;

2.基于setter的注入,只有当对象是需要被注入的时候它才会帮助我们注入依赖,而不是在初始化的时候就注入;另一方面如果你使用基于constructor注入,CGLIB不能创建一个代理,迫使你使用基于接口的代理或虚拟的无参数构造函数

3.相信很多人都选择使用直接在成员变量上写上注解来注入,正如我们所见,这种方式看起来非常好,精短,可读性高,不需要多余的代码,也方便维护;

以上就是关于java spring依赖注入方式有哪几种以及有什么区别的主要内容了。可以看出它们之间的却别还是很明显的。如果你对java知识感兴趣,想要了解更多与java架构师相关的内容,敬请关注奇Q工具网。

推荐阅读:

springsecurity面试题常见有哪些?

springsecurity的原理及教程解析

springsecurity权限控制的原理是如何实现的?