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

【应用配置】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. Hadoop集群的构建和安装

    1.安装Java $ yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel 上述命令默认安装位置/usr/lib/jvm/java-1. ...

  2. Zabbix-proxy安装部署

    原文链接:https://www.cnblogs.com/irockcode/p/6754659.html 环境: 因为公司需要监控远程客户机,但server端无法主动连接agent端,客户端可以连接 ...

  3. 2018蓝桥杯 省赛B题(明码)

    标题:明码汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中.一个字节可以存储8位信息,用32个字节就可以存 ...

  4. 20165223 《JAVA程序设计》第四周学习总结

    20165223 <JAVA程序设计>第四周学习总结 教材学习内容总结 第五章要点 子类与继承 成员变量的隐藏和方法重写 super关键字 继承与多态 abstract类与abstract ...

  5. 20165223 week1测试查漏补缺

    week1查漏补缺 经过第一周的学习后,在蓝墨云班课上做了一套31道题的小测试,下面是对测试题中遇到的错误的分析和总结: 一.背记题 不属于Java后继技术的是? Ptyhon Java后继技术有? ...

  6. 从Java的角度修复CSRF漏洞

    漏洞挖掘中,说实话挖过最多的漏洞就属CSRF漏洞了,提交CSRF漏洞很多次,绕过CSRF防御进行攻击也有很多次.CSRF漏洞是一个很容易引发的问题,今天我从Java的角度来说下这个安全漏洞的修复方案. ...

  7. Centos 6.5 安装和使用docker

    基于本人一贯的习惯,关于“某某某是什么”这样的问题,请百度吧,会有更专业的人士,会比我说的更详细更深,这里我只给出本人亲历的安装和使用过程. 1.安装 先检查服务器环境,docker要求操作系统Cen ...

  8. 【模板】ac自动机

    本来是真的特别不想写这个的 但是有段时间洛谷天天智推这个可能是我太菜了 然后觉得这个也不难 乘着今早没事写下 来这保存下 方便下次食用 #include <bits/stdc++.h> u ...

  9. Mock3 moco框架的http协议post方法Mock的实现

    新建一个 startupPost.json [ { "description":"模拟一个post请求", "request":{ &quo ...

  10. TestNg 12. extentReport测试报告

    直接上代码:以下是我的目录结构,首先新建一个包名字叫 com.tester.extent.demo,直接新建两个类就可以,名字叫  ExtentTestNGIReporterListener  和 T ...