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 注入是将 @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))
同样也可以实现注入,不过个人还是推荐使用 构造函数注入
的方式,能让代码更加规范。