栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义简易版SpringBoot,实现SpringBoot MVC及内嵌Tomcat启动、DispatcherServlet注册和组件扫描功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义简易版SpringBoot,实现SpringBoot MVC及内嵌Tomcat启动、DispatcherServlet注册和组件扫描功能

自定义简易版SpringBoot,实现SpringBoot MVC及内嵌Tomcat启动、DispatcherServlet注册和组件扫描功能

(1)创建maven工程,导入以下依赖:


        1.8
    

    
        
            org.apache.tomcat.embed
            tomcat-embed-core
            8.5.32
        
        
            org.springframework
            spring-context
            5.0.8.RELEASE
        
        
            org.springframework
            spring-webmvc
            5.0.8.RELEASE
        

        
            org.apache.tomcat.embed
            tomcat-embed-jasper
            8.5.32
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

(2)创建SpringApplication 类,编写run方法(方法中要求完成tomcat的创建及启动)

public class MySpringApplication {

    public static void run(){
        //创建tomcat实例
        Tomcat tomcat = new Tomcat();
        //设置tomcat端口
        tomcat.setPort(8080);
        try {
            //设置项目文件的目录
            tomcat.addWebapp("/","D:\myTest");
            //启动tomcat
            tomcat.start();
            //tomcat.start();是非阻塞型的,所以要阻塞一下,不能让服务停止。
            tomcat.getServer().await();
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

    }
}

(3)创建spring的配置类 AppConfig该类上要通过@ComponentScan来进行包扫描

@Configuration
@ComponentScan("com.lwq")
public class MyAppConfig {
}

(4)创建MyWebApplicationInitializer实现WebApplicationInitializer接口,重写onstartup方法(WebApplicationInitializer实现web.xml的配置)

public interface MyWebApplicationInitializer{

    
    void onStartup(ServletContext servletContext);
}
public class MyWebApplicationInitializerImpl implements MyWebApplicationInitializer {

    public void onStartup(ServletContext servletContext) {
        System.out.println("Spring初始化");
        //通过注解方式初始化spring上下文
        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
        //注册spring的配置类
        annotationConfigWebApplicationContext.register(MyAppConfig.class);
        //刷新
        annotationConfigWebApplicationContext.refresh();

        //初始化dispatcherServlet
        DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigWebApplicationContext);
        ServletRegistration.Dynamic myDispatcherServlet = servletContext.addServlet("MyDispatcherServlet", dispatcherServlet);
        myDispatcherServlet.setLoadOnStartup(1);
        myDispatcherServlet.addMapping("/");
    }
}

(5)创建MySpringServletContainerInitializer,实现ServletContainerInitializer接口,重写onstartup方法,方法中调用第4步中MyWebApplicationInitializer的onstartup方法

@HandlesTypes(MyWebApplicationInitializer.class)
public class MySpringServletContainerInitializer implements ServletContainerInitializer {

    public void onStartup(Set> set, ServletContext servletContext) throws ServletException {
        System.out.println("模拟spring初始化");
        if (set != null) {
            Iterator var = set.iterator();

            while(var.hasNext()) {
                Class waiClass = (Class)var.next();
                if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && MyWebApplicationInitializer.class.isAssignableFrom(waiClass)) {
                    try {
                        ((MyWebApplicationInitializer)waiClass.newInstance()).onStartup(servletContext);
                    } catch (Throwable var7) {
                        throw new ServletException("Failed to instantiate WebApplicationInitializer class", var7);
                    }
                }
            }
        }
    }
}

(6)创建文件:meta-INF/services/javax.servlet.ServletContainerInitializer,在该文件中配置ServletContainerInitializer的实现类MySpringServletContainerInitializer

public class MyRunBoot {

    public static void main(String[] args){
        MySpringApplication.run();
    }
}
@RestController
@RequestMapping("/api")
public class TestController {

    @GetMapping("/test")
    public String test(){
        System.out.println("test");
        return "test";
    }
}

测试结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/697159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号