Setter 注入的实现代码如下:
@RestController
public class UserController {
// Setter 注入
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/add")
public UserInfo add(String username, String password) {
return userService.add(username, password);
}
}
从上面代码可以看出,Setter 注入比属性注入要麻烦很多。 要说 Setter 注入有什么优点的话,那么首当其冲的就是它完全符合单一职责的设计原则,因为每一个 Setter 只针对一个对象。 但它的缺点也很明显,它的缺点主要体现在以下 2 点:
接下来我们一一来看。
使用 Setter 注入依然不能注入不可变对象,比如以下注入会报错:
Setter 注入提供了 setXXX 的方法,意味着你可以在任何时候、在任何地方,通过调用 setXXX 的方法来改变注入对象,所以 Setter 注入的问题是,被注入的对象可能随时被修改。