为什么我可以不使用@autowired

这是第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;
    }
tycotyco 回答:为什么我可以不使用@autowired

它的春天特色。

为此打开了一个已解决的issue

长话短说:

如果该类只有一个构造函数(并且在Java中,一旦创建了构造函数,则默认的no-arg构造函数将不复存在)并被注释为@Component,那么spring可以“理解”该构造函数调用此构造函数是实例化bean的唯一方法。因此,它会自检其参数并注入所需的内容。 所有这些操作都没有真正指定@Autowired

从Spring 4.3 RC1开始有效:请参见Release notes

,

我认为应该在传递给OrderController构造函数之前(通过@Configuration或XML)创建OrderRepository实例。在这种情况下,不需要@Autowired注释。

本文链接:https://www.f2er.com/3147708.html

大家都在问