Spring Boot《Spring Boot实战》

书评:

整体介绍的比较简单全面 ,清晰易读;大部分地方都增加了代码辅助理解;

知识点比较全,但没什么深度都浮于表面止于应用;

整体来说,是一本入门级的图书。对spring比较了解的话,可以很快看完!然后,还记不住太多东西。

(想了解可以看看,想深入不推荐读。)

 

第一部分 点睛Spring 4.x (1-3章)

主要讲了Spring 简史,概览,生态系统,工具第使用。常用的配置,以注解为主,是

 

第二部分 点睛Spring MVC 4.x(4章)

简单讲了一下SpringMVC的基础,此处略。

 

第三部分 实战Spring Boot (5章--end)

第五章:不同的构建Spring Boot项目的方式。

第六章:Spring Boot核心

6.1、@SpringBootApplication

Spring Boot 的项目一般都会有 *Application 的入口类,入口类中会有 main 方法,这是一个标准的Java应用程序的入口方法。

@SpringBootApplication 注解是 Spring Boot 的核心注解,它其实是一个组合注解:

 

该注解主要组合了以下注解:

  • @SpringBootConfiguration:这是 Spring Boot 项目的配置注解,这也是一个组合注解:

  • @EnableAutoConfiguration:启用自动配置,该注解会使 Spring Boot 根据项目中依赖的 jar 包自动配置项目的配置项。例如:我们添加了 spring-boot-starter-web 的依赖,项目中也就会引入 SpringMVC 的依赖,Spring Boot 就会自动配置 tomcat 和 SpringMVC。

  • @ComponentScan:默认扫描 @SpringBootApplication 所在类的同级目录以及它的子目录。

    6.2、全局配置文件

    Spring Boot 项目使用一个全局的配置文件 application.properties 或者是 application.yml,在 resources 目录下或者类路径下的 /config 下,一般我们放到 resources 下。

    我们知道 Spring Boot 会根据在 pom.xml 中依赖的 jar 包进行自动配置,如果要对这些 jar 包对应的框架进行配置可以在全局配置文件中进行配置。

    6.3、Starter pom

    Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom,只要使用了应用场景所需要的 starter pom,相关的技术配置将会消除,就可以得到 Spring Boot 为我们提供的自动配置的 Bean。

    官方提供的 starter pom 如下表所示:

    名称

    描述

    spring-boot-starter

    Spring Boot核心 starter,包含自动配置、日志、yaml 配置文件的支持

    spring-boot-starter-actuator

    准生产特性,用来监控和管理应用

    spring-boot-starter-remote-shell

    提供基于 ssh 协议的监控和管理

    spring-boot-starter-amqp

    使用 spring-rabbit 来支持 AMQP

    spring-boot-starter-aop

    使用 spring-aop 和 AspectJ 支持面向切面编程

    spring-boot-starter-batch

    对 Spring Batch 的支持

    spring-boot-starter-cache

    对 Spring Cache 抽象的支持

    spring-boot-starter-cloud-connectors

    对云平台(Cloud Foundry、Heroku)提供的服务提供简化的连接方式

    spring-boot-starter-data-elasticsearch

    通过 spring-data-elasticsearch 对 Elasticsearch 支持

    spring-boot-starter-data-gemfire

    通过 spring-data-gemfire 对分布式存储 GemFire 的支持

    spring-boot-starter-data-jpa

    对 JPA 的支持,包含 spring-data-jpa、spring-orm 和 Hibernate

    spring-boot-starter-data-mongodb

    通过 spring-data-mongodb,对 MongoDB 进行支持

    spring-boot-starter-data-rest

    通过 spring-data-rest-webmvc 将 Spring Data repository 暴露为 REST 形式的服务

    spring-boot-starter-data-solr

    通过 spring-data-solr 对 Apache Solr 数据检索平台的支持

    spring-boot-starter-freemarker

    对 FreeMarker 模板引擎的支持

    spring-boot-starter-groovy-templates

    对 Groovy 模板引擎的支持

    spring-boot-starter-hateoas

    通过 spring-hateoas 对基于 HATEOAS 的 REST 形式的网络服务的支持

    spring-boot-starter-hornetq

    通过 HornetQ 对 JMS 的支持

    spring-boot-starter-integration

    对系统集成框架 spring-integration 的支持

    spring-boot-starter-jdbc

    对 JDBC 数据库的支持

    spring-boot-starter-jersey

    对 Jersey REST 形式的网络服务的支持

    spring-boot-starter-jta-atomikos

    通过 Atomikos 对分布式事务的支持

    spring-boot-starter-jta-bitronix

    通过 Bitronix 对分布式事务的支持

    spring-boot-starter-mail

    对 javax.mail 的支持

    spring-boot-starter-mobile

    对 spring-mobile 的支持

    spring-boot-starter-mustache

    对 Mustache 模板引擎的支持

    spring-boot-starter-redis

    对键值对内存数据库 Redis 的支持,包含 spring-redis

    spring-boot-starter-security

    对 spring-security 的支持

    spring-boot-starter-social-facebook

    通过 spring-social-facebook 对 Facebook 的支持

    spring-boot-starter-social-linkedin

    通过 spring-social-linkedin 对 Linkedin 的支持

    spring-boot-starter-social-twitter

    通过 spring-social-twitter 对 Twitter 的支持

    spring-boot-starter-test

    对常用的测试框架 JUnit、Hamcrest 和 Mockito 的支持,包含 spring-test 模块

    spring-boot-starter-thymeleaf

    对 Thymeleaf 模板引擎的支持,包含于 Spring 整合的配置

    spring-boot-starter-velocity

    对 Velocity 模板引擎的支持

    spring-boot-starter-web

    对 Web 下面开发的支持,包含 Tomcat 和 spring-webmvc

    spring-boot-starter-Tomcat

    Spring Boot 默认的Servlet 容器 Tomcat

    spring-boot-starter-Jetty

    使用 Jetty 作为 Servlet 容器替换 Tomcat

    spring-boot-starter-undertow

    使用 Undertow 作为 Servlet 容器替换 Tomcat

    spring-boot-starter-logging

    Spring Boot 默认的日志框架 Logback

    spring-boot-starter-log4j

    支持使用 Log4J 日志框架

    spring-boot-starter-websocket

    对 WebSocket 开发的支持

    spring-boot-starter-ws

    对 Spring Web Services 的支持

     

    6.4、引入XML配置文件

    Spring Boot 提倡零配置,即无 XML 配置,但是在实际项目中,可能有一些特殊要求你必须使用 XML 配置,这是可以通过 Spring 提供的 @ImportResouce 来加载 XML 配置。例如:

    代码块

    Plant Text

    @ImportResouce({"classpath:some-context.xml", "classpath:another-context.xml"})

     

    6.5、条件注解

    条件注解只有满足特定条件才会实例化。例如:

    代码块

    Plant Text

    ......@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) ......public class WebMvcAutoConfiguration {    ......}

    以上代码说明只有当 Servlet、DispatcherServlet、WebMvcConfigurerAdapter 同时存在才会实例化 WebMvcAutoConfiguration。

    Spring Boot 提供了以下条件注解:

    条件注解

    说明

    @ConditionalOnBean

    当容器里有指定的 Bean 的条件下

    @ConditionalOnClass

    当类路径下有指定的类的条件下

    @ConditionalOnExpression

    基于 SpEL 表达式作为判断条件

    @ConditionalOnJava

    基于 JVM 版本作为判断条件

    @ConditionalOnJndi

    在 JNDI 存在的条件下查找指定的位置

    @ConditionalOnMissingBean

    当容器里没有指定 Bean 的情况下

    @ConditionalOnMissingClass

    当类路径下没有指定的类的条件下

    @ConditionalOnNotWebApplication

    当前项目不是 Web 项目的条件下

    @ConditionalOnProperty

    指定的属性是否有指定的值

    @ConditionalOnResource

    类路径是否有指定的值

    @ConditionalOnSingleCandidate

    当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选的 Bean

    @ConditionalOnWebApplication

    当前项目是 Web 项目的条件下


    第七章、Spring Boot的Web开发

  • 介绍了一些与前端相关的东西,都是浮于表面,意义不大。

    7.1、自定义消息转化器

    方法一:

    自定义消息转化器,只需要在 @Configuration 的类中添加消息转化器的 @Bean 加入到 Spring 容器,就会被 Spring Boot 自动加入到容器中。例如:

    代码块

    Plant Text

    @Bean public StringHttpMessageConverter stringHttpMessageConverter(){     
        StringHttpMessageConverter converter  = new StringHttpMessageConverter(Charset.forName("UTF-8"));    
        return converter; 
        }

     

    方法二:

    通过继承 WebMvcConfigurerAdapter 然后重写父类中的 configureMessageConverters 方法进行扩展。例如:

    代码块

    Plant Text

    @Configurationpublic class SrpingMVCConfig extends WebMvcConfigurerAdapter{      
    // 自定义消息转化器的第二种方法     
      @Override     
      public void configureMessageConverters(List> converters) { 
          StringHttpMessageConverter converter  = new StringHttpMessageConverter(Charset.forName("UTF-8"));
          converters.add(converter);     
          } 
    }

     

    7.2、自定义拦截器

    通过继承 WebMvcConfigurerAdapter 然后重写父类中的方法进行扩展。例如:

    代码块

    Plant Text

    @Configuration public class SrpingMVCConfig extends WebMvcConfigurerAdapter{      
        // 自定义拦截器     
        @Override     
        public void addInterceptors(InterceptorRegistry registry) {         
            HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {             
            @Override             
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
                throws Exception {                 
                System.out.println("自定义拦截器............");                
                return true;            
             }              
             @Override             
             public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
             ModelAndView modelAndView) throws Exception {              }              
             @Override             
             public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                    Exception ex) throws Exception { 
     
                    }         
     
             };         
             registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");     
             }
          }

     

    7.3、自定义Filter

    自定义Filter,只需要在 @Configuration 的类中添加消息转化器的 @Bean 加入到 Spring 容器,就会被 Spring Boot 自动加入到容器中。例如:

    代码块

    Plant Text

    @Bean public FilterRegistrationBean characterEncodingFilter() { 
          CharacterEncodingFilter filter = new CharacterEncodingFilter();     
          FilterRegistrationBean registration = new FilterRegistrationBean(filter);     
          registration.addUrlPatterns("/*");     
          registration.setName("SetCharacterEncoding");     
          Map initParameters = new HashMap<>();     
          initParameters.put("encoding", "UTF-8");     
          initParameters.put("forceEncoding", "true");     
          registration.setInitParameters(initParameters);     
          registration.setOrder(CHARACTER_ENCODING_FILTER_ORDER);     
          return registration; 
     }

     

    7.4、自定义Servlet

    自定义Servlet,只需要在 @Configuration 的类中添加消息转化器的 @Bean 加入到 Spring 容器,就会被 Spring Boot 自动加入到容器中。例如:

    代码块

    Plant Text

    @Configuration public class ServletConfiguration {      
          @Bean     
          @ConditionalOnMissingBean     
          public ServletRegistrationBean sitemeshFreemarker() {
              FreemarkerDecoratorServlet servlet = new FreemarkerDecoratorServlet();
              ServletRegistrationBean registration = new ServletRegistrationBean();
              registration.setServlet(servlet);         
              registration.setName("sitemesh-freemarker");         
              registration.addUrlMappings("*.ftl");         
              Map initParameters = new HashMap<>();         
              initParameters.put("TemplatePath", "/");         
              initParameters.put("default_encoding", "UTF-8");         
              registration.setInitParameters(initParameters);         
              registration.setLoadOnStartup(1);          
              return registration;     
              }
    }

     

    7.5、自定义Listener

    自定义Listener,只需要在 @Configuration 的类中添加消息转化器的 @Bean 加入到 Spring 容器,就会被 Spring Boot 自动加入到容器中。例如:

    代码块

    Plant Text

    @Configuration public class ListenerConfiguration {           
        @Bean     
        @ConditionalOnMissingBean     
        public ServletListenerRegistrationBean jmonitorContextListener() {
              ContextListener listener = new ContextListener();         
              return new ServletListenerRegistrationBean<>(listener);    
        }      
        @Bean     
        @ConditionalOnMissingBean     
        public ServletListenerRegistrationBean webContextListener() {
        WebContextListener listener = new WebContextListener();         
        return new ServletListenerRegistrationBean<>(listener);     
        } 
     }

     

第八章 Spring Boot的数据访问

在 Spring Boot 中推荐使用 @Transactional 注解来申明事务。

首先需要导入依赖:

代码块

Plant Text

     
    org.springframework.boot     
    spring-boot-starter-jdbc 
 
  

当引入 jdbc 依赖之后,Spring Boot 会自动默认分别注入 DataSourceTransactionManager 或 JpaTransactionManager,所以我们不需要任何额外配置就可以用 @Transactional 注解进行事务的使用。

@Transactional 不仅可以注解在方法上,也可以注解在类上。当注解在类上的时候意味着此类的所有 public 方法都是开启事务的。如果类级别和方法级别同时使用了 @Transactional 注解,则使用在类级别的注解会重载方法级别的注解。

 

你可能感兴趣的:(SpringBoot)