Java 弹簧中的抽象控制器

Java 弹簧中的抽象控制器,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,几周前我就开始使用SpringBoot了,但我仍然无法理解“AbstractController”的概念 我很想了解控制器和抽象控制器之间的区别。在类的名称中添加抽象是一种简单的方法,可以指定该类为抽象(在您的示例中声明为公共抽象类)。这意味着开发这个类是为了合并一些公共功能,这些功能将被几个子类重用。JDK本身也有这样的类,比如java.util.AbstractList public abstract class AbstractController { protected sta

几周前我就开始使用SpringBoot了,但我仍然无法理解“AbstractController”的概念


我很想了解控制器和抽象控制器之间的区别。

在类的名称中添加
抽象
是一种简单的方法,可以指定该类为
抽象
(在您的示例中声明为
公共抽象类
)。这意味着开发这个类是为了合并一些公共功能,这些功能将被几个子类重用。JDK本身也有这样的类,比如
java.util.AbstractList

public abstract class AbstractController {

    protected static final String CUSTOMER_SESSION_ID = "auth";
    protected static final String SHOOPY_CART_ID = "SHOOPY_CART";

    protected static final String REFERER_HEADER = "Referer";

    @Autowired
    protected CatalogService catalogService;

    @Autowired
    protected TotalAmountCalculator amountCalculator;

    @Autowired
    protected CustomerRepository customerRepo;

    @Autowired
    protected CartRepository cartRepository;


    //Insert necessary data to the header tag
    public void populateHeaderData(Model model, Cart activeCart) {
        HeaderDTOBuilder.HeaderDTO headerDTO = new HeaderDTOBuilder().
                withAmountCalculator(amountCalculator)
                .withActiveCart(activeCart)
                .withCategories(catalogService.getCategories()).build();
        model.addAttribute("headerDTO", headerDTO);
    }


    public void populateHeaderData(Model model, HttpServletRequest request) {
        Cart activeCart = getCartFrom(request);
        if(activeCart == null){
            activeCart = new Cart();
        }
        populateHeaderData(model, activeCart);
    }

}

您可以在此处找到有关抽象类概念的更多信息

只有当您拥有或计划拥有多个具有共享逻辑或实例变量的控制器类时,您才会创建一个抽象控制器

如果你在控制器之间有一些共同的功能,谢谢@Deadpool