Spring Boot 起步
………………………………………………………………………………………………………………
【应用配置】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 起步的更多相关文章
- Spring Boot起步依赖:定制starter
在定制我们自己的起步依赖--xxx.spring.boot.starter之前,我们先了解下什么是Spring Boot起步依赖. 起步依赖,是Spring Boot带给我们的一项重要的便利.要理解S ...
- 1.spring boot起步之Hello World【从零开始学Spring Boot】
[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...
- (1)spring boot起步之Hello World【从零开始学Spring Boot】
Spring Boot交流平台 1.1 介绍 自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓. 以前spring开发需要配置一大堆的xml,后台spring加入了annot ...
- 创建Spring Boot项目的几种方式总结
一.我们可以使用Spring Initializr来创建SpringBoot项目. Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构.虽 ...
- 49. spring boot日志升级篇—理论【从零开始学Spring Boot】
我们之前在其中的一篇文章介绍过如何在spring boot中使用日志记录SLF4J. Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如 ...
- 48. spring boot单元测试restfull API【从零开始学Spring Boot】
回顾并详细说明一下在在之前章节中的中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...
- (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】
在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- (42)Spring Boot多数据源【从零开始学Spring Boot】
我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
随机推荐
- hdu 1686 Oulipo (kmp)
Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, w ...
- 生命不息,折腾不止 ~ 旧PC改造之家庭影音
前言引入 之前把在校园陪伴多年的旧电脑由Win装成了Linux,的确不卡了,基本上日常办公也够了(大项目还是吃不消,日常捣鼓倒是够了),然后把真正的工作游戏本也改成了Linux,那么旧电脑又变成闲置机 ...
- loj6045 价
题目链接 思路 从源点\(S\)向每种药连一条边权为\(-p+inf\)的边.从每种药向他所需要的药材连一条边权为\(INF\)的边.从每种药材向汇点\(T\)连一条边权为\(inf\)的边. \(I ...
- 快速傅里叶变换(FFT)
扯 去北京学习的时候才系统的学习了一下卷积,当时整理了这个笔记的大部分.后来就一直放着忘了写完.直到今天都腊月二十八了,才想起来还有个FFT的笔记没整完呢.整理完这个我就假装今年的任务全都over了吧 ...
- 用tkinter制作签名设计窗口
效果如下: from tkinter import * from tkinter import messagebox import requests import re from PIL import ...
- C++自定义NULLPTR
惊奇的发现C++中连NULL和nullptr都有区别 NULL和nullptr 根据文章,应当做好NULL和nullptr的兼容工作 翻阅了一下qt的宏定义 #ifdef __GNC__ #defin ...
- WORD2010如何把全角字母和数字批量转换成半角
个人觉得全角字符看起来相当别扭,如果文档中存在大量全角形式的字母和数字,要如何把它们全部转化成半角的呢? 全角和半角 全角是指一个字符占用两个标准字符位置的状态.汉字字符和规定了全角的英文字符 ...
- 3D游戏的角色移动
* -----英雄的移动控制 * * * * */ using System.Collections; using System.Collections.Generic; using UnityEng ...
- POJ 2253 Frogger (Floyd)
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions:57696 Accepted: 18104 Descript ...
- php5.4后htmlspecialchars输出为空的问题
从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,ht ...