在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工具网。
推荐阅读: