java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot依赖注入

Springboot中依赖注入的三种方式详解

作者:五月天的尾巴

这篇文章主要介绍了Springboot中依赖注入的三种方式详解,Setter Injection需要依赖@Autowired注解,使用方式与Field Injection有所不同,Field Injection时@Autowired是用在成员变量上,需要的朋友可以参考下

Springboot依赖注入Bean的方式

一、Field 注入/属性注入

@Autowired注解的一大使用场景就是Field Injection。

@Controller
public class UserController {
    @Autowired
    private UserService userService;
}

通过Java的反射机制实现,所以private的成员也可以被注入具体的对象

优点

缺点

二、set注入

Setter Injection需要依赖@Autowired注解,使用方式与Field Injection有所不同,Field Injection时@Autowired是用在成员变量上,而Setter Injection的时候,@Autowired是用在成员变量的Setter函数上。

@Controller
public class UserController {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService){
        this.userService = userService;
    }
}

通过调用成员变量的set方法来注入想要使用的依赖对象。

优点

缺点

三、构造器注入

Constructor Injection是构造器注入,是Springboot最为推荐的一种使用方式。

@Controller
public class UserController {
    private final UserService userService;
    public UserController(UserService userService){
        this.userService = userService;
    }
}

注意:

通过对象构建的时候建立关系,这种方式对对象创建的顺序会有要求,当然Spring会为你搞定这样的先后顺序,除非你出现循环依赖,然后就会抛出异常。

Spring 4.x 的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用构造器注入方式:

优点

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

若手工写构造方法觉得麻烦,也可以使用lombok中的@RequiredArgsConstructor

@RequiredArgsConstructor
public class VerifyController {
    private final UserService userService;
    private final StudentService studentService;
}

@RequiredArgsConstructor

@RequiredArgsConstructor 注解是针对标有 @NonNull 注解的变量和 final 变量进行参数的构造方法。

到此这篇关于Springboot中依赖注入的三种方式详解的文章就介绍到这了,更多相关Springboot依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文