我还在学习编程语言java和spring,在学习过程中,我看到了一种创建依赖注入的新方法,在我使用这种类型之前。
@RestController
@RequestMapping("/api/car")
public class CarController {
final CarServiceImp carServiceImp;
final RestTemplate restTemplate;
public CarController(CarServiceImp carServiceImp, RestTemplate restTemplate) {
this.carServiceImp = carServiceImp;
this.restTemplate = restTemplate;
}
@GetMapping("/getcars")
public Response getCarByPage(@RequestParam Integer page,@RequestParam Integer size,@RequestParam String price) {
return carServiceImp.getCarByPage(page,size,price);
}
@GetMapping("/car")
public Response getAllCarFromAutoShop(@RequestParam(name = "autshopId") Integer id) {
return carServiceImp.getAllCarFromAutoShop(id);
}
@PostMapping
public Response addAllCar(@RequestBody List<Car> carList) {
return carServiceImp.addAll(carList);
}
@PostMapping("/one")
public Response addOneCar(@RequestBody Car car) {
return carServiceImp.addOne(car);
}
}
这里是使用DI的新方法我的问题是,当使用DI访问修饰符和注释@Autowired
与构造器时,顺便说一下,哪一个更适合使用,谢谢你的回答
@RestController
@RequestMapping("/api/car")
public class CarController {
private final CarServiceImp carServiceImp;
private final RestTemplate restTemplate;
@Autowired
public CarController(CarServiceImp carServiceImp, RestTemplate restTemplate) {
this.carServiceImp = carServiceImp;
this.restTemplate = restTemplate;
}
@GetMapping("/getcars")
public Response getCarByPage(@RequestParam Integer page,@RequestParam Integer
size,@RequestParam String price) {
return carServiceImp.getCarByPage(page,size,price);
}
@GetMapping("/car")
public Response getAllCarFromAutoShop(@RequestParam(name = "autshopId") Integer id) {
return carServiceImp.getAllCarFromAutoShop(id);
}
@PostMapping
public Response addAllCar(@RequestBody List<Car> carList) {
return carServiceImp.addAll(carList);
}
@PostMapping("/one")
public Response addOneCar(@RequestBody Car car) {
return carServiceImp.addOne(car);
}
}
在Spring 4.3之前,@Autowired注释是需要的。从那时起,如果只有一个构造函数,它是可选的。
spring中有三种注入方式:字段注入、setter注入和更可取的构造函数注入(您使用的那种)。
构造函数注入是首选,因为如果构造函数期望所有必需的依赖项作为参数,则可以确定所有需要的依赖项都被注入。这样,如果没有所需的依赖项,类就不会被实例化。
类中字段的可见性应该始终是私有的,如果不需要的话。