SpringBoot 的依赖注入思想让我们能够更加方便的注入对象,@Autowired 这一注解能够帮助我们注入那些打了 @Component、@Service、@Controller 等注解的类到让其,使其不需要手动的实例化。

@Autowired 有三种常用的注入方式,分别是属性注入、Setter注入、构造函数注入。

属性注入

这是一种非常普遍的注入方式,但在 IDEA 中,用这种方式注入,它会提示我们 Field injection is not recommended,显然这不是一个好的注入方法。

@RestController
@RequestMapping("/v1/user")
public class UserController {
	@Autowired
	private UserService userService;
}

Setter 注入

Setter 注入是将 @Autowired 注解打在 Setter 方法上,使用该注入方式,没有了 IDEA 警告,但同时方法体也更长了。

@RestController
@RequestMapping("/v1/user")
public class UserController {
	private UserService userService;

	@Autowired
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
}

构造函数注入

构造函数和 Setter 注入类似,但它将 @Autowired 注解打在了构造函数上,该方法实际上是 Spring 官方最推荐的注入方式,目前我一般也有这种方式注入。

@RestController
@RequestMapping("/v1/user")
public class UserController {
	private final UserService userService;

	@Autowired
	public UserController(UserService userService) {
		this.userService = userService;
	}
}

其实 @Autowired 的注入方式还有许多,比如使用 lombok @RequiredArgsConstructor(onConstructor=@_(@Autowired)) 同样也可以实现注入,不过个人还是推荐使用 构造函数注入 的方式,能让代码更加规范。


标题:@Autowired 三种常用的注入方式
作者:Jeffrey