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:用法未验证
springBoot基础2的更多相关文章
- (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- SpringBoot基础系列一
SpringBoot基础知识概览 特性 核心理念:约定优于配置 特点: 1. 开箱即用,根据项目依赖自动配置 2. 功能强大的服务体系,如嵌入式服务.安全 3. 绝无代码生成,不用写.xml配置,用注 ...
- SpringBoot基础系列-SpringCache使用
原创文章,转载请标注出处:<SpringBoot基础系列-SpringCache使用> 一.概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Sprin ...
- SpringBoot基础系列-使用日志
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...
- SpringBoot基础系列-使用Profiles
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996884.html SpringBoot基础系列-使用Profile 概述 Profi ...
- SpringBoot基础系列-SpringBoot配置
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...
- SpringBoot 基础01
SpringBoot 基础 pom.xml <!-- Spring Boot 依赖版本控制 --> <parent> <groupId>org.springfram ...
- springBoot基础
开始之前最基础的东东here 官网:http://projects.spring.io/spring-boot/ 基础快速构建:http://start.spring.io/ 松哥的博客:http:/ ...
- 视频作品《springboot基础篇》上线了
1.场景描述 第一个视频作品出炉了,<springboot基础篇>上线了,有需要的朋友可以直接点击链接观看.(如需购买,请通过本文链接购买) 2. 课程内容 课程地址:https://ed ...
随机推荐
- django之两个使用模板的例子
from django.db import models # Create your models here. class Book(models.Model): title=models.CharF ...
- redis-单线程架构
单线程模型: redis中的数据结构并不全是简单的kv,还有list.hash等复杂的结构,这些结构很可能会进行细粒度的操作,比如在很长的列表偶棉添加一个元素,在hash当中或者删除一个对象,这样的一 ...
- 实战ELK(6)使用logstash同步mysql数据到ElasticSearch
一.准备 1.mysql 我这里准备了个数据库mysqlEs,表User 结构如下 添加几条记录 2.创建elasticsearch索引 curl -XPUT 'localhost:9200/user ...
- ORM对象关系映射
ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...
- Mysql 和 SQLServer 使用SQL差异比较
查询前100条数据 #mysql ; #sqlserver * from table_name ; 从数据库.表 定位表 #mysql写法:库名.表名 select password from Inf ...
- threading.local()源码分析
前段时间写了个多线程的程序,了解到Python中有个与众不同的thread.local()方法,可以创建一个全局对象,各个线程可以用这个全局对象保存各自的局部变量,而在使用时不受其他线程的影响.于是抽 ...
- 剑指offer——合并两个排序的链表——对象、引用和赋值初接触
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...
- Linux网络编程学习(五) ----- 信号(第四章)
1.基本概念 进程阻塞: 进程执行条件得不到满足,就自动放弃CPU资源而进入休眠状态,以等待条件满足,当条件满足时,系统就将控制权还给该进程进行未完成的操作 共享资源: 进程间协调使用的系统资源 锁定 ...
- install oracle 12c on redhat
---恢复内容开始--- 1. 确定VM的硬盘空间是否够 df- h, 硬盘空间free disk 15G 比较稳妥 2. 确定好网络,需要remote connect ifconfig 3. ...
- resize2fs
VPS是15G的..但是dh和fdisk显示不一样..求解 df:Filesystem Size Used Avail Use% Mounted onudev 236M 0 236M 0% /devt ...