这是第5页上的示例中的动态
OrderController.java
@Controller
@RequestMapping("/orders")
@SessionAttributes("order")
public class OrderController {
private OrderRepository orderRepo;
public OrderController(OrderRepository orderRepo) {
this.orderRepo = orderRepo;
}
@GetMapping("/current")
public String orderForm() {
return "orderForm";
}
@PostMapping
public String processOrder(@Valid Order order, Errors errors, SessionStatus sessionStatus) {
if (errors.hasErrors()) {
return "orderForm";
}
orderRepo.save(order);
sessionStatus.setComplete();
return "redirect:/";
}
}
OrderRepository.java
public interface OrderRepository {
Order save(Order order);
}
为什么我可以使用此代码而不添加@Autowired 感谢您的帮助。
public OrderController(OrderRepository orderRepo) {
this.orderRepo = orderRepo;
}
答案 0 :(得分:3)
它的春天特色。
为此打开了一个已解决的issue
长话短说:
如果该类只有一个构造函数(并且在Java中,一旦创建了构造函数,则默认的no-arg构造函数将不复存在)并被注释为@Component
,那么spring可以“理解”该构造函数调用此构造函数是实例化bean的唯一方法。因此,它会自检其参数并注入所需的内容。
所有这些操作都没有真正指定@Autowired
。
从Spring 4.3 RC1开始有效:请参见Release notes
答案 1 :(得分:0)
我认为应该在传递给OrderController构造函数之前(通过@Configuration或XML)创建OrderRepository实例。在这种情况下,不需要@Autowired注释。