Рукописный фреймворк SpringBoot

Spring Boot задняя часть

1. Что такое фреймворк SpringBoot.

SpringBoot — этоБыстрая интеграция сторонних фреймворков;Упрощенная конфигурация xml и полная аннотация;Встроенный http-сервер (jetty и tomcat), который в конечном итоге выполняется как java-приложение.

Примечание. Нижний уровень SpringCloud полагается на SpringBoot для реализации интерфейса микросервиса (веб-компонент SpringBoot интегрирует SpringMVC) и использует SpringMVC для написания интерфейса.

2, анализ принципа SpringBoot.

2.1 Быстро интегрировать сторонние фреймворки.Принцип таков: maven дочерняя-родительская зависимость, которая эквивалентна Jar среды, которую необходимо интегрировать для инкапсуляции информации о зависимости.

2.2 Файла конфигурации вообще нет (аннотировано). Как его инициализировать? Без web.xml как запускается tomcat? Аннотация запускается в версии Spring 2.5 и выше, а встроенная аннотация SpringMVC загружает весь контейнер SpringMVC. Напишите инициализацию конфигурации SpringMVC, используя код Java. Аннотация @EnableWebMvc.

2.3 Встроенный http-сервер, принцип использования языка java для создания контейнера tomcat и загрузки файла класса.

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, основной класс программы запуска. 

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 Загрузите класс DispatchServlet SpringMVC.

AbstractAnnotationConfigDispatcherServletInitializer Этот класс отвечает за «инициализацию».Весенний контейнер,Контейнер SpringMVC, настройте DispatcherServlet". Метод getRootConfigClasses() используется для получения конфигурационного файла контейнера приложения Spring, здесь мы передаем предопределенный RootConfig.class; getServletConfigClasses отвечает за получение контейнера приложения Spring MVC, здесь передается предопределенный WebConfig.class in; метод 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. Получается, что мы вообще используем его в файле xmlmvc: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, Методы контроллера и сервисного уровня.

@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. Конкретный исходный код можно найти в облаке кода:git ee.com/Teacher Li использует компьютер_Artimi…