• springBoot基础2


      

    主要记录上一篇 springBoot基础 中涉及到的pom、项目结构、注解等

    首先是pom:

    • 关于pom中这段插件配置:
    • <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <executions>
              <execution>
                  <goals>
                      <goal>repackage</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>

      该配置会在Maven生命周期的 package 阶段重新打包一个jar或war可以自己运行一下 mvn package(各种版本问题看上一章)会在项目target下生成两个文件

       

       其中的jar包可以直接用命令运行:

    • java -jar target/springboot2-0.0.1-SNAPSHOT.jar

      注意需要在pom中指定打包成jar还是war: 

    • <packaging>jar</packaging>
    • 如果打包的war包需要放到外部容器中运行,不使用内嵌的(啥也不配居然就能跑的比如tomcat)容器,则需要把相应的maven依赖标记为 provided,比如:
    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
      </dependency>

      有关scope不清楚的参考这里:http://acooly.iteye.com/blog/1788890

    项目结构和注解:

    • 项目结构和一般的spring项目差不多,但是多了一个和controller、service这些包同级的类
    • 此时我们把上一章中放在LoginController中的main方法删掉,在com.micheal.boot包下(和controller、service、dao层等同级)建立一个类,作为main方法入口

    • 关于项目结构,spring文档中是这样说的:
    •     通常建议将应用的main类放到其他类所在包的顶层(root package),并将 @EnableAutoConfiguration 注解到你的main类上,这样就隐式地定义了一个基础的包搜索路径(search package),以搜索某些特定的注解实体(比如@Service,@Component等)。例如,如果你正在编写一个JPA应用,Spring将搜索 @EnableAutoConfiguration 注解的类所在包下的 @Entity 实体。
          采用root package方式,你就可以使用 @ComponentScan 注解而不需要指定 basePackage 属性,也可以使用 @SpringBootApplication 注解,只要将main类放到root package中。
    • 这里有3个注解:
    • @Configuration:
      • spring的注解,表示这是一个配置类,@Configuration注解该类,等价于XML中配置beans
      • // TODO:有待补充
    • @EnableAutoConfiguration:
      • 直译就启用自动配置:springBoot会根据上文中pom里添加的各种依赖来自动配置spring应用,官方注释中是“attempting to guess and configure beans that you are likely to need”。比如我们在pom中引了spring-boot-starter-web,这个依赖中包括Tomcat和SpringMVC,springBoot会按照我正在开发一个web应用并相应地对spring进行配置。
      • 就向spring文档中说的:通常建议将有main方法的类放在根目录,并使用 @EnableAutoConfiguration 注解这个main类,表明springBoot会逐层扫描这个类往下的各个类。注意,只需要添加这个注解一次就可以,不必在main类之外的其他类上再添加。
      • 如果有不想要的特定自动配置类,可以使用 @EnableAutoConfiguration 的 exclude 属性来禁用它们。例如,如果我们添加自己的数据源,那么spring默认的将不再使用,这时可以这样:
      • // 不使用默认的数据源
        @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
        // 不使用不在classpath里的类
        @EnableAutoConfiguration(excludeName = {"com.ufo.jupiter.StarBoomer", "com.ufo.jupiter.XXX"})  
    • @ComponentScan:
      • spring的注解,和在xml中配componentScan标签意义相同,表明扫描spring注解的范围:spring要去扫描@Controller、@Service、和@Configuration 等的包范围。
      • 如果把main类按照上文的样子放在根包下,则@ComponentScan不需要任何参数(不用设置basePackages了)。
    • // TODO:待确认:
      • 是不是其实 @componentScan才是注解扫描用到的,而 @EnableAutoConfiguration所提到的扫描具体作用是什么?
      • 需要在写到配置文件的时候,试一试去掉这两个注解都有什么效果
    • 简化写法:@SpringBootApplication:
    • 由于平时配置main类时, 频繁的一起使用@Configuration、@EnableAutoConfiguration、@ComponentScan这三个注解, 因此Spring Boot提供了一个简单的注解SpringBootApplication来代替这三个注解, 其效果与这三个注解一起使用的效果完全一样,并具有他们的属性默认值

    回到项目Controller中:

    • 在上一篇文章中,controller层注解使用了@RestController:
    • 这也是一个spring的注解,其继承自@Controller,相当于@Controller和@ResponseBody的总和,即不需要再在controller的每个方法注解@ResponseBody。如果返回类型为String,那么就是个String^^。如果返回类型为对象,且这个对象能通过Jackson2序列化,则默认渲染为json,比如:
    • 之所以会自动解析为JSON,是有默认的转换器:MappingJackson2HttpMessageConverter。可以自己写一个转换器来覆盖之。//TODO:写一个

    • 其他注解:
    • @ImportResouece:
      • 使用XML配置。使用 @ImportResource 注解来加载 xml 配置文件
      • // TODO:用法未验证
    • @Import:
      • 导入其他配置类
      • // TODO:用法未验证
     
    micheal.li > 阿智
    micheal.li > mikeve@163.com
  • 相关阅读:
    Bootstrip的相关介绍
    Django的ORM主外键约束实现
    Django基于ORM数据库配置
    Django的安装与配置
    ORM(关系对象映射)框架之面向对象
    pymysql模块的数据操作
    SQL语句实践
    mysql 数据库的基本操作语法
    算法训练 矩阵乘法
    算法训练 字串统计
  • 原文地址:https://www.cnblogs.com/loveCheery/p/6027905.html
Copyright © 2020-2023  润新知