/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.admin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author lgh
 * 这是一个Spring Boot应用的启动类，用于启动整个Web应用，通常包含了应用的配置、启动逻辑等相关内容。
 */
@SpringBootApplication
// @SpringBootApplication注解是一个组合注解，相当于同时使用了@Configuration、@EnableAutoConfiguration和@ComponentScan，
// 它表明这个类是一个Spring Boot应用的配置类，并且开启自动配置以及组件扫描功能。
@ComponentScan("com.yami.shop")
// @ComponentScan注解用于指定Spring要扫描的基础包路径，在这里表示会扫描com.yami.shop及其子包下的所有组件（比如@Component、@Service、@Repository等标注的类），
// 以便将这些组件纳入Spring容器进行管理。
public class WebApplication extends SpringBootServletInitializer {

    /**
     * 应用的主入口方法，Java应用程序从这里开始执行，会启动Spring Boot应用，传入当前类（WebApplication.class）以及命令行参数（args），
     * Spring Boot会根据配置和自动配置机制来初始化整个应用上下文，加载各种组件并启动Web服务器（如果是Web应用的话）等相关操作。
     */
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

    /**
     * 当应用以WAR包形式部署到外部的Servlet容器（如Tomcat等）时，需要重写这个方法来配置Spring应用的启动构建器。
     * 在这里返回的SpringApplicationBuilder会指定启动的主类（即WebApplication.class），以便容器能够正确加载和启动应用。
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WebApplication.class);
    }

}