………………………………………………………………………………………………………………

【应用配置】application.yml 【port】【context-path】【datasource】【jpa】

@Value("${var}") 可取到 yml 所声明的变量

@ConfigurationProperties(prefix="yourgroup") 一次性取到 yml 所声明一组变量

【profile 机制】application.yml application-dev.xml application-prod.xml

spring.profiles.active=dev (properties写法,常用在说明文档)

……………………………………………………………………………………………………………………………………

【Controller】@RestController = @ResponseBody+@Controller 可以返回 JSON

@RequestMapping(路由,方法)    懒人写法 @GetMapping @PostMapping

@PathVariable 等同于 express 中的 req.params 大家都爱叫路径参数 请求参数 路径变量...

@RequestParam 等同于 req.query ,记住 Servlet的req.getParameter是不区分 urlencoded 来的还是 form-data。

…………………………………………………………………………………………………………………………………………

【REST API】http://en.wikipedia.org/wiki/Representational_state_transfer

GET /grils

POST /grils

GET /girls/id

PUT /grils/id 如果没有则创建,postman注意使用 x-www-form-urlencoded 而不是 form-data

DELETE /girls/id

【mysql】jdbc:mysql://127.0.0.1:3306/dbname

spring.datasource.driver...

【jpa】比较流行 hibernate 实现 JPA 规范。

jpa.hibernate.ddl-auto:create # 每次启动应用都创建一个

jpa.hibernate.ddl-auto:update # 每次启动应用都创建一个

jpa.hibernate.show-sql

public interface GrilRepository extends JpaRepository<Gril,Integer>{}//使用默认实现

【模型设计】

@Entity

@Id

@GeneratedValue

getter setter / accessor mutator

【实现路由 REST API】

1.查看 设计 逐一实现 比如表单验证 @Valid  @Min @NotNull ...

2.使用 JPA 规范 API 比如签名 findOne findById

……………………………………………………………………

【Service 层】业务逻辑,让controller专注于HTTP请求路由。

@Service

@Trancsational 事务原子操作 要么成功 要么就不成功。

…………………………………………………………………………………………………………………………………………

日常【错误异常处理】Spring对RuntimeException有事务回滚功能,而不是Exception。

@Vaild + BindingResult(一个传错误消息(调试用)的类)

【定义错误消息和REST API调用统一】Result{code,msg,data}

【定义异常消息和REST API调用统一】@ControllerAdvice + @ExceptionHandler@ResponseBody

【维护自定义的错误码放在一处】ResultEnum 用枚举类型关联(code,msg)

【综述错误处理还是要放在实践上】总结只是提出集中的办法。

……………………………………………………………………………………………………………………

日常【日志】log4j log4j2 logback(boot官方推荐) 作者都是同一个。

private static final Logger logger = LogFactory.getLogger(.class)

日常【拦截请求 | 日志 | 安全 系统通用部分 AOP】直接联系代码 更容易理解

@Aspect

【切点】@Pointcut("execution (public com.example.class_name.method_name(..))")

public void log(){}

@Before("log()")

【扩展点 可以取到 类方法、参数】public void doBefore(Joinpoint jp)

@After("log()")

@AfterReturning(returning,pointcut)

………………………………………………………………………………………………………………

TDD 加速 Spring Boot 开发,我们都知道前端的优势在于 REPL 环境非常快得到明确的结果,在 java 这种 jit 甚至 aot 环境想要获得这种明确快速的体验可以通过 测试 手段帮助。

日常【单元测试】idea可以右键方法 Go To 生成 Test。

@RunWith(SpringRunner.class) //基于 JUnit

@SpringBootTest //表示需要启动应用

@AutoConfigureMockMvc //省去了启动浏览器 相当于 headerless(不知道我理解错了没有) 的浏览器。

mvn clean package 会自动启动单元测试

mvn clean package -Dmaven.test.skip=true 跳过单元测试

………………………………………………………………………………………………

以下为深入 Spring Boot 本质 部分。

…………………………………………………………………………………………

IoC  = DI + DL

Bean  一个个注入   <bean id="identifier" class="pkg">

Bean 整批 自动扫描  <context:component-scan base-package="pkg"> + 高内聚的注解,@ComponentScan(basePackage)

xml描述依赖 或者  @Autowired 和 @Inject

或者 JavaConfig 是 Guice 推动,@Conifiguration,核心就是依赖注入 Singleton 。

……………………………………………………………………………………………………

@SpringBootApplication 最主要分解 @ComponentScan

+ @EnableAutoConfiguration 通过@Import将所有符合自动配置条件的Bean加载到IoC容器 ,核心类是SpringFactoriesLoader。

+ @Configuration =》@EnableAutoConfigurationImportSelector + SpringFactoriesLoader => ApplicationContext 。

…………………………………………………………………………………………………………………………

SpringApplication模板化了启动流程,提供了一系列扩展点。

………………………………………………………………………………………………………………………………

基于Spring的约定优先于配置(COC),提供针对日常企业应用研发场景【Spring-boot-starter】实现【自动配置依赖模块(开箱即用)】。

我们可以干预SpringBoot配置的方式:

1.命令行参数

2.系统环境变量

3.classpath

4.filesystem

5.代码硬编码

Spring Boot 起步的更多相关文章

  1. Spring Boot起步依赖:定制starter

    在定制我们自己的起步依赖--xxx.spring.boot.starter之前,我们先了解下什么是Spring Boot起步依赖. 起步依赖,是Spring Boot带给我们的一项重要的便利.要理解S ...

  2. 1.spring boot起步之Hello World【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...

  3. (1)spring boot起步之Hello World【从零开始学Spring Boot】

    Spring Boot交流平台 1.1 介绍 自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓. 以前spring开发需要配置一大堆的xml,后台spring加入了annot ...

  4. 创建Spring Boot项目的几种方式总结

    一.我们可以使用Spring Initializr来创建SpringBoot项目. Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构.虽 ...

  5. 49. spring boot日志升级篇—理论【从零开始学Spring Boot】

    我们之前在其中的一篇文章介绍过如何在spring boot中使用日志记录SLF4J. Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如 ...

  6. 48. spring boot单元测试restfull API【从零开始学Spring Boot】

    回顾并详细说明一下在在之前章节中的中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...

  7. (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】

    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...

  8. (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

    在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...

  9. (42)Spring Boot多数据源【从零开始学Spring Boot】

    我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...

随机推荐

  1. C语言中的类型转换——将字符串s转换为整数型(int)类型

    在讲类型转换之前,我们先要理解下C语言中单引号和双引号的区别. 先讲双引号,双引号就是字符串,我们要证实我们的想法,我选择写一段代码看看开: #include <stdio.h> int ...

  2. 【POJ2226】Muddy Fields

    题目大意:给定一个 N*M 的图,图中有一些格子不能被任何东西覆盖,现有一些宽度为 1,长度任意的骨牌覆盖这些可以被覆盖的格子,骨牌之间可以重叠,求将所有可以被覆盖的格子覆盖所需的最小骨牌数是多少. ...

  3. [luogu4626][一道水题2]

    题目链接 思路 这个首先想到质因数分解.然后发现只要对于每个质数将ans乘以这个质数在从1到n中出现过的最高指数次就行了. 这个\(10^8\)令人发指.一直tle,最后发现吸口氧才能过.. 代码 # ...

  4. Django(十八)Model操作补充

    参考博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 1. 创建类 class UserInfo(model.Model): age = ...

  5. 真机控件获取 app-inspector

    1.安装app-inspector:npm  install  app-inspector  -g 若是要卸载原有的:npm   uninstall   app-inspector   -g   np ...

  6. 第二十三篇-ubuntu18.04怎么下载播放器以及如何设置默认播放器

    下载播放器 安装命令:sudo apt-get install smplayer再安装解码器: 安装win32codecs包 如果是intel的CPU 代码: sudo apt-get install ...

  7. Echarts关于仪表盘

    https://blog.csdn.net/zc763375777/article/details/53837391 来无事,制作不一样的图标一发,领导让把仪表盘做成百分条,我TM也是醉了,大体样式如 ...

  8. MATLAB中mesh函数的使用:基于像素强度画3D密度图(create a 3D density plot based on the pixel intensity:mesh function)

    所用的函数非常简单,只需要用到mesh函数,示例代码如下: Ima=imread('F:\pathto\test.jpg'); surf_ima = surf(rgb2gray(Ima)); %黑色的 ...

  9. pthread_create()

    pthread_create()创建的线程没有执行,试了好几遍.非常郁闷.后来发现主线程没有睡眠,新创建的线程还没来的及执行主线程就退出了,所以没有执行.

  10. Image.fromarray的用法

    简而言之,就是实现array到image的转换 详细参考以下博客 https://blog.csdn.net/ybcrazy/article/details/81206411