Spring Boot系列(一):Spring Boot快速開始


一、Spring Boot介紹

  Spring Boot可以很容易的創建可直接運行的獨立的基於Spring的應用程序。

  功能特點:

  • 創建獨立的Spring應用程序;
  • 直接嵌入Tomcat、Jetty等Web容器(不需要部署WAR文件);
  • 提供一些“starter(啟動器)”依賴關系來簡化構建配置;
  • 自動配置Spring和第三方庫;
  • 提供可用於生產的功能,如運行狀況檢查和外部化配置等;
  • 無代碼生成和XML配置要求;

二、Spring Boot快速開始

  1、創建一個maven工程

  

   2、導入Spring Boot相關的jar包

<!--父工程依賴-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath/>
  </parent>

  <dependencies>
    <!-- web -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>

  <build>
    <finalName>spring-boot-web</finalName>
    <plugins>
      <!--打包fat jar,引入該插件,可以幫助我們將web應用程序打成可執行jar包-->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  3、編寫啟動程序

/**
 * @desc: spring boot 啟動類
 * @author: toby
 * @date: 2019/7/17 23:03
 */
@SpringBootApplication
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

  4、自己寫的@Controller @Service等注解標示的組件,必須放在啟動類(WebApplication)所在的包及其子包下

  5、運行程序

java -jar spring-boot-web.jar

三、Spring Boot初探

  為什么只引入spring-boot-starter-parent和spring-boot-starter-web就可以快速開發web mvc應用?

  1、pom.xml分析

  spring-boot-web的pom.xml如下:

  進去如下spring-boot-starter-parent的pom.xml:

 

   進去如下spring-boot-dependencies的pom.xml:

 

   spring-boot-dependencies其實相當於一個對spring-boot所依賴jar包進行版本管理,所有我們導入依賴默認是不需要寫版本的!

  2、spring-boot-starter-web為我項目中導入web開發需要的jar包依賴

 四、Spring Boot擴展Spring Mvc配置

  1、添加攔截器

  第一步:創建一個攔截器

/**
 * @desc: 創建一個攔截器
 * @author: toby
 */
@Slf4j
public class TobyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("TobyInterceptor的preHandle方法");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("TobyInterceptor的postHandle方法");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("TobyInterceptor的afterCompletion方法");
    }
}

  第二步:注冊攔截器

/**
 * @desc: WebMvc配置
 * @author: toby
 */
@Configuration
public class TobyWebMvcConfig implements WebMvcConfigurer {

    /**
     * 注冊攔截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TobyInterceptor()).addPathPatterns("/**");
    }
}

  2、增加過濾器

  第一步:創建一個過濾器

/**
 * @desc: 創建一個過濾器
 * @author: toby
 */
@Slf4j
@Component
public class TobyFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("TobyFilter的doFilter方法"); filterChain.doFilter(servletRequest,servletResponse); } }

  第二步:注冊過濾器

/**
 * @desc: WebMvc配置
 * @author: toby
 */
@Configuration
public class TobyWebMvcConfig implements WebMvcConfigurer {

    @Bean
    public FilterRegistrationBean<TobyFilter> filterFilterRegistrationBean(TobyFilter tobyFilter){
        FilterRegistrationBean<TobyFilter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
        List<String> uriList = new ArrayList<>(1);
        uriList.add("/**");
        filterFilterRegistrationBean.setFilter(tobyFilter);
        filterFilterRegistrationBean.setEnabled(true);
        filterFilterRegistrationBean.setUrlPatterns(uriList);
        filterFilterRegistrationBean.setName("tobyFilter");
        filterFilterRegistrationBean.setOrder(1);
        return filterFilterRegistrationBean;
    }
}

  3、添加Servlet

  第一步:創建一個Servlet

/**
 * @desc: 創建一個Servlet
 * @author: toby
 */
@Slf4j
@Component
public class TobyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("TobyServlet的doPost方法");
    }
}

  第二步:注冊Servlet

/**
 * @desc: WebMvc配置
 * @author: toby
 */
@Configuration
public class TobyWebMvcConfig implements WebMvcConfigurer {

    /**
     * 注冊Servlet
     * @param tobyFilter
     * @return
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean(TobyFilter tobyFilter){
        return new ServletRegistrationBean(new TobyServlet(), "/servlet");
    }
}

  運行結果如下:

 

 

  4、如何接管Spring Boot的Mvc配置

  使用@EnableWebMvc注解(不推薦使用

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
//導入了DelegatingWebMvcConfiguration的組件 @Import(DelegatingWebMvcConfiguration.
class) public @interface EnableWebMvc { }

  ① DelegatingWebMvcConfiguration的繼承圖

   ② 再看下WebMvc的自動配置類WebMvcAutoConfiguration

@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
//容器中沒有WebMvcConfigurationSupport該配置文件才生生效,但是我們使用了@EnableWebMvc導入了WebMvcConfiurationSupport,它只保證了Spring Mvc的最基本的功能 @ConditionalOnMissingBean(WebMvcConfigurationSupport.
class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration {

  五、總結

  本文主要介紹了Spring Boot的功能特性,如何快速開始一個Spring Boot項目,以及如何擴展Spring Mvc配置,比如如何添加自己的攔截器,過濾器,和Servlet。Spring Boot是微服務的開發利器,所以要對微服務組件有深入了解,Spring Boot的自動裝配組件是必備技能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM