乐趣区

关于后端:腾讯T33级资深架构师呕心整理10万字节springboot教程全解

前言: 能够毫不夸大地说,这篇文章介绍的 SpringBoot 教程根本曾经涵盖你工作中遇到的大部分罕用的场景。对于每一个 springboot 的用法,文中都会都会有具体的教程解释。

本文总共从 29 个章节,248 页 PDF,论述 springboot 在各种环境下的各种用法,文中给大家列举出局部的 springboot 教程,须要这份 10 万字节 springboot 全教程 PDF 的敌人,能够关注小编 + 转发文章 + 私信【springboot】获取教程文档。

纯 Java 搭建 SSM 我的项目在 Spring Boot 我的项目中,失常来说是不存在 XML 配置,这是因为 Spring Boot 不举荐应用 XML,留神,并非不反对,Spring Boot 举荐开发者应用 Java 配置来搭建框架,Spring Boot 中,大量的自动化配置都是通过 Java 配置来实现的,这一套实现计划,咱们也能够本人做,即本人也能够应用纯 Java 来搭建一个 SSM 环境,即在我的项目中,不存在任何 XML 配置,包含 web.xml。环境要求:应用纯 Java 来搭建 SSM 环境,要求 Tomcat 的版本必须在 7 以上。疾速体验 1 创立工程创立一个一般的 Maven 工程(留神,这里能够不用创立 Web 工程),并增加 SpringMVC 的依赖,同时,这里环境的搭建须要用到 Servlet,所以咱们还须要引入 Servlet 的依赖(肯定不能应用低版本的 Servlet),最终的 pom.xml 文件如下:<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>5.1.6.RELEASE</version>
</dependency>
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.1</version>
   <scope>provided</scope>
</dependency>2 增加 Spring 配置工程创立胜利之后,首先增加 Spring 的配置文件,如下:@Configuration
@ComponentScan(basePackages = “org.javaboy”, useDefaultFilters = true,
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes =
Controller.class)})
public class SpringConfig {
}对于这个配置,我说如下几点:@Confifiguration 注解示意这是一个配置类,在咱们这里,这个配置的作用相似于 applicationContext.xml@ComponentScan 注解示意配置包扫描,里边的属性和 xml 配置中的属性都是一一对应的,useDefaultFilters 示意应用默认的过滤器,而后又除去 Controller 注解,即在 Spring 容器中扫描除了 Controller 之外的其余所有 Bean。3 增加 SpringMVC 配置接下来再来创立 springmvc 的配置文件:@Configuration
@ComponentScan(basePackages = “org.javaboy”,useDefaultFilters =
false,includeFilters = {@ComponentScan.Filter(type =
FilterType.ANNOTATION,classes = Controller.class)})
public class SpringMVCConfig {
}留神,如果不须要在 SpringMVC 中增加其余的额定配置,这样就能够了。即 视图解析器、JSON 解析、文件上传 …… 等等,如果都不须要配置的话,这样就能够了。4 配置 web.xml 此时,咱们并没有 web.xml 文件,这时,咱们能够应用 Java 代码去代替 web.xml 文件,这里会用到 WebApplicationInitializer,具体定义如下:public class WebInit implements WebApplicationInitializer {
   public void onStartup(ServletContext servletContext) throws ServletException
{
       // 首先来加载 SpringMVC 的配置文件
       AnnotationConfigWebApplicationContext ctx = new
AnnotationConfigWebApplicationContext();
       ctx.register(SpringMVCConfig.class);
       // 增加 DispatcherServlet
       ServletRegistration.Dynamic springmvc =
servletContext.addServlet(“springmvc”, new DispatcherServlet(ctx));
       // 给 DispatcherServlet 增加门路映射
       springmvc.addMapping(“/”);
       // 给 DispatcherServlet 增加启动机会
       springmvc.setLoadOnStartup(1);
  }
}WebInit 的作用相似于 web.xml,这个类须要实现 WebApplicationInitializer 接口,并实现接口中的办法,当我的项目启动时,onStartup 办法会被主动执行,咱们能够在这个办法中做一些我的项目初始化操作,例如加载 SpringMVC 容器,增加过滤器,增加 Listener、增加 Servlet 等。留神:因为咱们在 WebInit 中只是增加了 SpringMVC 的配置,这样我的项目在启动时只会去加载 SpringMVC 容器,而不会去加载 Spring 容器,如果肯定要加载 Spring 容器,须要咱们批改 SpringMVC 的配置,在 SpringMVC 配置的包扫描中也去扫描 @Confifiguration 注解,进而加载 Spring 容器,还有一种计划能够解决这个问题,就是间接在我的项目中舍弃 Spring 配置,间接将所有配置放到 SpringMVC 的配置中来实现,这个在 SSM 整合时是没有问题的,在理论开发中,较多采纳第二种计划,第二种计划,SpringMVC 的配置如下:@Configuration
@ComponentScan(basePackages = “org.javaboy”)
public class SpringMVCConfig {
} 这种计划中,所有的注解都在 SpringMVC 中扫描,采纳这种计划的话,则 Spring 的配置文件就能够删除了。5 测试最初,增加一个 HelloController,而后启动我的项目进行测试:@RestController
public class HelloController {
   @GetMapping(“/hello”)
   public String hello() {
       return “hello”;
  }
}启动我的项目,拜访接口,后果如下:

6 其余配置 6.1 动态资源过滤动态资源过滤在 SpringMVC 的 XML 中的配置如下:<mvc:resources mapping=”/**” location=”/”/> 在 Java 配置的 SSM 环境中,如果要配置动态资源过滤,须要让 SpringMVC 的配置继承 WebMvcConfifigurationSupport,进而重写 WebMvcConfifigurationSupport 中的办法,如下:@Configuration
@ComponentScan(basePackages = “org.javaboy”)
public class SpringMVCConfig extends WebMvcConfigurationSupport {
   @Override
   protected void addResourceHandlers(ResourceHandlerRegistry registry) {
     
registry.addResourceHandler(“/js/**”).addResourceLocations(“classpath:/”);
  }
}重写 addResourceHandlers 办法,在这个办法中配置动态资源过滤,这里我将动态资源放在 resources 目录下,所以资源地位是 classpath:/,当然,资源也能够放在 webapp 目录下,此时只须要批改配置中的资源地位即可。如果采纳 Java 来配置 SSM 环境,一般来说,能够不用应用 webapp 目录,除非要应用 JSP 做页面模板,否则能够疏忽 webapp 目录。6.2 视图解析器在 XML 文件中,通过如下形式配置视图解析器:<bean class=”org.springframework.web.servlet.view.InternalResourceViewResolver”>
   <property name=”prefix” value=”/WEB-INF/jsp/”/>
   <property name=”suffix” value=”.jsp”/>
</bean> 如果通过 Java 类,一样也能够实现相似性能。首先为咱们的我的项目增加 webapp 目录,webapp 目录中增加一个 jsp 目录,jsp 目录中增加 jsp 文件:

而后引入 JSP 的依赖:<dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>javax.servlet.jsp-api</artifactId>
   <version>2.3.1</version>
</dependency> 而后,在配置类中,持续重写办法:@Configuration
@ComponentScan(basePackages = “org.javaboy”)
public class SpringMVCConfig extends WebMvcConfigurationSupport {
   @Override
   protected void configureViewResolvers(ViewResolverRegistry registry) {
       registry.jsp(“/jsp/”, “.jsp”);
  }
}接下来,在 Controller 中增加控制器即可拜访 JSP 页面:@Controller
public class HelloController2 {
   @GetMapping(“/hello2”)
   public String hello() {
       return “hello”;
  }
}6.3 门路映射有的时候,咱们的控制器的作用仅仅只是一个跳转,就像下面大节中的控制器,里边没有任何业务逻辑,像这种状况,能够不必定义方法,能够间接通过门路映射来实现页面拜访。如果在 XML 中配置门路映射,如下:<mvc:view-controller path=”/hello” view-name=”hello” status-code=”200″/> 这行配置,示意如果用户拜访 /hello 这个门路,则间接将名为 hello 的视图返回给用户,并且响应码为 200,这个配置就能够代替 Controller 中的办法。雷同的需要,如果在 Java 代码中,写法如下:@Configuration
@ComponentScan(basePackages = “org.javaboy”)
public class SpringMVCConfig extends WebMvcConfigurationSupport {
   @Override
   protected void addViewControllers(ViewControllerRegistry registry) {
       registry.addViewController(“/hello3”).setViewName(“hello”);
  }此时,用户拜访 /hello3 接口,就能看到名为 hello 的视图文件。6.4 JSON 配置 springMVC 能够接管 JSON 参数,也能够返回 JSON 参数,这所有依赖于 HttpMessageConverter。HttpMessageConverter 能够将一个 JSON 字符串转为 对象,也能够将一个对象转为 JSON 字符串,实际上它的底层还是依赖于具体的 JSON 库。所有的 JSON 库要在 SpringMVC 中主动返回或者接管 JSON,都必须提供和本人相干的 HttpMessageConverter。SpringMVC 中,默认提供了 Jackson 和 gson 的 HttpMessageConverter,别离是:MappingJackson2HttpMessageConverter 和 GsonHttpMessageConverter。正因为如此,咱们在 SpringMVC 中,如果要应用 JSON,对于 jackson 和 gson 咱们只须要增加依赖,加完依赖就能够间接应用了。具体的配置是在 AllEncompassingFormHttpMessageConverter 类中实现的。如果开发者应用了 fastjson,那么默认状况下,SpringMVC 并没有提供 fastjson 的 HttpMessageConverter,这个须要咱们本人提供,如果是在 XML 配置中,fastjson 除了加依赖,还要显式配置 HttpMessageConverter,如下:<mvc:annotation-driven>
   <mvc:message-converters>
       <bean
class=”com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter”>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven> 在 Java 配置的 SSM 中,咱们一样也能够增加这样的配置:@Configuration
@ComponentScan(basePackages = “org.javaboy”)
public class SpringMVCConfig extends WebMvcConfigurationSupport {
   @Override
   protected void configureMessageConverters(List<HttpMessageConverter<?>>
converters) {
       FastJsonHttpMessageConverter converter = new
FastJsonHttpMessageConverter();
       converter.setDefaultCharset(Charset.forName(“UTF-8”));
       FastJsonConfig fastJsonConfig = new FastJsonConfig();
       fastJsonConfig.setCharset(Charset.forName(“UTF-8”));
       converter.setFastJsonConfig(fastJsonConfig);
       converters.add(converter);
  }
}而后,就能够在接口中间接返回 JSON 了,此时的 JSON 数据将通过 fastjson 生成。下面就是对于 springboot 全教程一个章节的知识点整顿,还有 28 个知识点因为文章的字数限度,就不给大家一一指出来了,如果大家有需要的话,点击这里获取

退出移动版