开发第一个Web应用程序

  • 项目目录结构说明

    • 启动类@SpringBootApplication

      Spring Boot 1.2.0开始,实际包含3个注解功能
      @Configuration //标明该类使用Spring基于Java的配置
      @ComponentScan //启用组件扫描,Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean
      @EnableAutoConfiguration //开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了

    • 使用gradle bootRun命令,来启动

      使用gradle命令来启动
      gradle build
      java -jar build/libs/readinglist-0.0.1-SNAPSHOT.jar

    • 测试类@SpringApplicationConfiguration

      配置类里加载Spring应用程序上下文,标识如何加载Spring的应用程序上下文。

    • 配置文件application.properties

      server.port=8000 //应用启动端口修改

  • 构建过程

    构建插件的主要功能是把项目打包成一个可执行的超级JAR( uber-JAR),包括把应用程序的
    所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序

    • Gradle中的SpringBoot插件

      //依赖插件
      dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:
      ➥ ${springBootVersion}")
      }
      //使用插件
      apply plugin: 'spring-boot'

      gradle bootRun 运行程序

    • Maven中的SpringBoot插件



      org.springframework.boot
      spring-boot-maven-plugin

      spring-boot:run 运行程序

  • 使用起步依赖:基于功能的依赖

    POM (Project Object Model)
    起步依赖没有版本,起步依赖本身的版本是由正在使用的Spring Boot的版本来决定的,而起步依赖则会决定它们引入的传递依赖的版本。

    依赖树:
    gradle dependencies
    mvn dependency:tree

    • Maven和Gradle对传递依赖版本不同处理的差异

      Maven:总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。
      Gradle:倾向于使用库的最新版本。因此,如果你要使用老版本的Jackon,则不得不把老版本的依赖加入构建,并把Web起步依赖传递依赖的那个版本排除掉。
      例如:
      compile("com.fasterxml.jackson.core:jackson-databind:2.3.1")
      compile("org.springframework.boot:spring-boot-starter-web") {
      exclude group: 'com.fasterxml.jackson.core'
      }
      //如果starter里面传递依赖的jackson库大于2.3.1,就需要做exclude排除掉。而Maven就不用,直接依赖引入就可以了。

      ==========
      排除传递依赖写法:

      Gradle中:
      compile("org.springframework.boot:spring-boot-starter-web") {
      exclude group: 'com.fasterxml.jackson.core'
      }

      Maven中:

      org.springframework.boot
      spring-boot-starter-web


      com.fasterxml.jackson.core


  • 使用自动配置

    • Web应用程序

      • 1.定义领域模型(Model)

        @Entity:标记JPA实体
        id属性加了@Id和@GeneratedValue:唯一键

      • 2.定义仓库接口

        定义接口并继承JpaRepository 接口
        //是实体类、ID
        //继承了18个执行常用持久化操作的方法

        Spring Data提供了很神奇的魔法,只需定义仓库接口,在应用程序启动后,该接口在运行时会自动实现。

        注意:自定义接口方法时,使用特定的命名方式才行:
        比如:findByReader(String reader) 其中reader是一个表属性,这个表示查询的意思。

      • 3.创建Web界面

        Spring MVC控制器就能为应用程序处理HTTP请求。
        Thymeleaf来定义应用程序的视图。

        @Controller
        @RequestMapping("/") //来标记一个Controller

        @RequestMapping(value="/{reader}",method = RequestMethod.GET) //来标记某个方法,处理http请求

        @Autowired 来装载Repository

        方法返回值:
        "readingList" 标记为thymeleaf模版文件,在目录resources/templates 目录下

        "redirect:/{reader}" 标记为重定向的某个http路径方法调用处理

      • 资源文件 resources目录下

        • readBookList.html :模版html文件



          Reading List



          Your Reading List




          Author
          (ISBN: th:text="{book.description eq null}">
          No description available





          You have no books in your book list





          Add a book



















        • style.css

          body {
          background-color: #cccccc;
          font-family: arial,helvetica,sans-serif;
          }
          .bookHeadline {
          font-size: 12pt;
          font-weight: bold;
          }
          .bookDescription {
          font-size: 10pt;
          }
          label {
          font-weight: bold;
          }

    • 自动配置基于条件化配置实现

      条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。

      条件化装载Bean:
      1.使用@Configuration来标记装载Bean的配置类
      2.使用@Bean来标记注入的Bean
      3.使用@Conditional,进行条件化装配,比如有两个一样的Bean,通过条件化配置来匹配某个Bean

      ===
      自动化配置基于条件化配置实现:
      @ConditionalOnClass
      自动配置会做出以下配置决策,例如
       因为Classpath里有Spring Data JPA,所以它会自动配置为根据仓库的接口创建仓库实现。
      因为Classpath里有Thymeleaf,所以Thymeleaf会配置为Spring MVC的视图,包括一个
      Thymeleaf的模板解析器、模板引擎及视图解析器。视图解析器会解析相对于Classpath根
      目录的/templates目录里的模板。
       因 为 Classpath 里 有 Spring MVC ( 归 功 于 Web 起 步 依 赖 ), 所 以 会 配 置 Spring 的
      DispatcherServlet并启用Spring MVC。

XMind - Trial Version

你可能感兴趣的:(开发第一个Web应用程序)