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.代码硬编码

 

posted @ 2018-04-27 23:13  chenhui7373  阅读(180)  评论(0编辑  收藏  举报