今天看了大佬的代码,看到他们在注入RestTemplate是这样写的:
//大佬的对象注入方式
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
-----------------------------------------------------
//平时我的注入方式
@Autowired
private RestTemplate restTemplate;
想问问这两种写法有什么区别?
大佬的写法的优点
1. 避免循环依赖。如果构造器中存在循环依赖,spring启动时就会抛出异常。而不是等到业务流程走到发现空指针时才发现
2. 不需要空指针检查,如果注入时为空则会直接抛出异常
3. 提升代码的复用性,如果不是spring容器,使用该bean不需要检查入参的空指针问题。而且如果不是spring容器服务,使用该bean只能通过反射的方式注入属性
注解在方法上和属性上,理论上是没有区别的,最终都会完成成员变量的 setter 动作。
,是通过调用 set 方法完成的。