手写SpringBoot框架

简介: 1、什么是SpringBoot框架。 SpringBoot是一个快速整合第三方框架;简化xml配置,完全采用注解化;内置http服务器(jetty和tomcat) ,最终是以java应用程序执行。 注

1、什么是SpringBoot框架。

SpringBoot是一个快速整合第三方框架简化xml配置,完全采用注解化内置http服务器(jetty和tomcat) ,最终是以java应用程序执行。

注意:SpringCloud底层依赖于SpringBoot实现微服务接口(SpringBoot Web组件集成SpringMVC),采用SpringMVC书写接口。

2、SpringBoot原理分析。

2.1、快速整合第三方框架,原理是:maven子父依赖关系,相当于需要整合的环境的Jar封装好依赖信息。

2.2、完全无配置文件(采用注解化)。如何初始化呢?没有web.xml那么tomcat是如何启动的呢?注解是在spring2.5以上开始,SpringMVC内置注解加载整个SpringMVC容器。使用java代码编写SpringMVC配置初始化。@EnableWebMvc注解。

2.3、内置http服务器,原理是使用java语言创建tomcat容器,加载class文件。

3、代码实现。

3.1、pom.xml文件,需要依赖的jar包。

<dependencies>
   <!--Java语言操作tomcat -->
   <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-core</artifactId>
      <version>8.5.16</version>
   </dependency>
   <!-- spring-web -->
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.4.RELEASE</version>
      <scope>compile</scope>
   </dependency>
   <!-- spring-mvc -->
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.4.RELEASE</version>
      <scope>compile</scope>
   </dependency>
   <!-- tomcat对jsp支持 -->
   <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jasper</artifactId>
      <version>8.5.16</version>
   </dependency>
</dependencies>

3.2、启动程序的main类。  

public class AppTomcat {
   public static void main(String[] args) throws ServletException, LifecycleException {
      // 使用Java内置Tomcat运行SpringMVC框架 原理:tomcat加载到
      // springmvc注解启动方式,就会创建springmvc容器
      start();
   }
   public static void start() throws ServletException, LifecycleException {
      // 创建Tomcat容器
      Tomcat tomcatServer = new Tomcat();
      // 端口号设置
      tomcatServer.setPort(9090);
      // 读取项目路径 加载静态资源
      StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
      // 禁止重新载入
      ctx.setReloadable(false);
      // class文件读取地址
      File additionWebInfClasses = new File("target/classes");
      // 创建WebRoot
      WebResourceRoot resources = new StandardRoot(ctx);
      // tomcat内部读取Class执行
      resources.addPreResources(
            new DirResourceSet(resources, "/WEB-INF/classes", additionWebInfClasses.getAbsolutePath(), "/"));
      tomcatServer.start();
      // 异步等待请求执行
      tomcatServer.getServer().await();
   }
}

3.3、加载SpringMVC的DispatchServlet类。

AbstractAnnotationConfigDispatcherServletInitializer这个类负责"初始化Spring容器SpringMVC容器、配置DispatcherServlet"。getRootConfigClasses()方法用于获取Spring应用容器的配置文件,这里我们给定预先定义的RootConfig.class;getServletConfigClasses负责获取Spring MVC应用容器,这里传入预先定义好的WebConfig.class;getServletMappings()方法负责指定需要由DispatcherServlet映射的路径,这里给定的是"/",意思是由DispatcherServlet处理所有向该应用发起的请求。

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

   // 加载根配置信息 spring核心
   protected Class<?>[] getRootConfigClasses() {
      return new Class[] { RootConfig.class };
   }

   // springmvc 加载 配置信息
   protected Class<?>[] getServletConfigClasses() {
      return new Class[] { WebConfig.class };
   }

   // springmvc 拦截url映射 拦截所有请求
   protected String[] getServletMappings() {
      return new String[] { "/" };
   }
}

3.4、加载Spring容器

/**
 * 根容器
 * 
 */
@Configuration
@ComponentScan("com.xxxx")
public class RootConfig {

}

3.5、加载SpringMVC容器

正如可以通过多种方式配置DispatcherServlet一样,也可以通过多种方式启动Spring MVC特性。原来我们一般在xml文件中使用<mvc:annotation-driven>元素启动注解驱动的Spring MVC特性。

/**
 * springmvc 配置信息
 * 
 * @EnableWebMvc 开启springmvc 功能<br>
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.xxx.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

   // springboot 整合jsp 最好是war
   // 需要配置视图转换器
   // 创建SpringMVC视图解析器
   @Bean
   public ViewResolver viewResolver() {
      InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
      viewResolver.setPrefix("/WEB-INF/views/");
      viewResolver.setSuffix(".jsp");
      // 可以在JSP页面中通过${}访问beans
      viewResolver.setExposeContextBeansAsAttributes(true);
      return viewResolver;
   }

}

3.6、Controller和Service层方法。

@RestController
public class IndexController {
   @Autowired
   private UserService userService;

   @RequestMapping(value = "/index", produces = "text/html;charset=UTF-8")
   public String index() {
      // return "纯手写SpringBoot ok啦!!!"
      return userService.index();
   }
}
@Service
public class UserService {

   public String index() {
      return "纯手写SpringBoot2,同时加载UserService ok啦!!";
   }
}

4、具体源码,请查看码云:https://gitee.com/llsydn_admin_admin/springboot2

目录
相关文章
|
2月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
248 2
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
4月前
|
Java Spring
聊聊你对SpringBoot框架的理解 ?
SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
167 0
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
118 8
|
2月前
|
监控 Kubernetes Cloud Native
Spring Batch 批处理框架技术详解与实践指南
本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
357 1
|
4月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
524 0
|
3月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
680 0
|
4月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
4月前
|
缓存 安全 Java
第五章 Spring框架
Spring IOC(控制反转)通过工厂模式管理对象的创建与生命周期,DI(依赖注入)则让容器自动注入所需对象,降低耦合。常见注解如@Component、@Service用于声明Bean,@Autowired用于注入。Bean默认单例,作用域可通过@Scope配置,如prototype、request等。Spring通过三级缓存解决循环依赖问题,但构造函数循环依赖需用@Lazy延迟加载。AOP通过动态代理实现,用于日志、事务等公共逻辑。事务通过@Transactional实现,需注意异常处理及传播行为。
85 0