产生警告的原因: Spring团队建议:始终在bean中使用基于构造函数的依赖注入, 所以idea出现警告,让我们改正。
使用setter注入时,通过@Autowired修饰setter方法
javaimport com.best.service.StudyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
/**
* @author : best
* @date : 2023/4/19
* @description: @Autowired解决方案-修饰setter方法
*/
@Controller
public class StudyController {
private StudyService service;
@Autowired
public void setStudyService(StudyService service) {
this.service = service;
}
}
Spring团队推荐,通过构造方法注入
通过final修饰注入的属性,可以防止值被更改,程序更健壮
javaimport com.best.service.StudyService;
import org.springframework.stereotype.Controller;
/**
* @author : best
* @date : 2023/4/19
* @description: @Autowired解决方案-构造参数注入
*/
@Controller
public class StudyController {
private final StudyService service;
public StudyController(StudyService service) {
this.service = service;
}
}
适用于需要注入的属性多,对应的构造方法的参数就会比较多
使用Lombok的@RequiredArgsConstructor注解用于为final或者@NonNull修饰的属性生成对应的构造方法
javaimport com.best.service.StudyService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
/**
* @author : best
* @date : 2023/4/19
* @description: @Autowired解决方案-RequiredArgsConstructor结合构造参数注入
*/
@Controller
@RequiredArgsConstructor
public class StudyController {
private final StudyService service1;
private final StudyService service2;
private final StudyService service3;
}