spring in action
读了这本书的半本,感觉是一本不错的扫盲书,不是深入的书,没有深入的带你分析spring源码和设计模式.
spring在日常应用过程中大家都有使用,但是因为spring历经了多个版本,在不熟悉spring的时候,有些解决方案都是百度直接过来的,百度到的代码只是帮你解决了问题,但是并没有帮你正确的解决问题.spring的版本是向下兼容的,很多老版本的spring代码依然可以在新版本上运行,但是很多老代码的解决方案会显得臃肿和笨拙,不但影响代码的可读性,通常也会附带很多鸡肋一样的注释.而新版本的优化可能让你更优雅的使用spring,但是你并不知道这些新的解决方案.这本书就可以帮你了解spring那些新的,coooooooool的解决方案.
Spring基础
关于启动类
@SpringBootApplication包含了如下三个注解
- @SpringBootConfig:生命该类是配置类.这个注解实际上是@configuation的特殊形式.
- @EnableAutoConfiguration:启用Spring boot的自动配置.
- @ComponentScan:启动组件扫描.
Main方法:
这个main方法会调用SpringApplication中的静态的run()方法,后者会真正的执行应用的引导过程,也就是创建spring的应用上下文.在传递给run的两个参数中,一个是配置类,另一个是命令行参数.
对大多数应用来说,最好还是为没有实现自动配置的功能创建一个单独的配置类.
Controller的单元测试
1 | (SpringRunner.class) |
Spring DevTools
热部署
DevTool运行的时候,应用程序会加载到JVM两个独立的类加载器中.其中一个类加载器会加载你的Java代码/属性文件以及项目中”src/main/“路径下的几乎所有内容.另一个类加载器加载依赖的库.
面向浏览器的资源(模板,JS,css等)发生变化时自动刷新浏览器
自动禁用模板缓存
需要浏览器的LiveReload插件
内置了H2控制台
Spring构成
- spirng核心框架
- Spring Boot
- Spring Data
- Spring Security
- Spring Integration和Spring Batch
- Spring cloud
领域
应用的领域指的是他所要解决的主体范围:也就是会影响到应用理解的理念和概念.(深入了解看<领域驱动设计>)
Thymeleaf
- 展示校验错误
1 | <span class="validationError" |
模板缓存
| 模板 | 配置项 |
| —————- | —————————- |
| FreeMaker | spring.freemaker.cache |
| Groovy Templates | spring.groovy.template.cache |
| Mustache | spring.mustache.cache |
| Thymeleaf | spring.thymeleaf.cache |true为启用,false为禁止
spring Data
- spring data 替换jpa实现库 (P73,只是一个maven配置)
- @PrePersist标注一个方法,对象在持久化之前,会调用这个方法,给某些字段加默认值.
1 |
|
- repository方法由一个动词,一个可选的主题(subject)/关键词by以及一个断言所组成的
- repository方法的操作符,见P79.例如IsAfter/After等等..
Spring Security
- 配置和加密
1 |
|
passwordEncoder()方法可以接受Spring Security中PasswordEncoder接口的任意实现.Spring Security的加密模块包括了多个这样的实现.
- BCryptPasswordEncoder:使用bcrypt强哈希加密
- NoOpPasswordEncoder:不进行任何转码
- Pbkdf2PasswordEncoder:使用PBKDF2加密
- ScryptPasswordEncoder:使用scrypt哈希加密
- StandardPasswordEncoder:使用SHA-256哈希加密
spring的配置
- 属性源:
- JVM系统属性
- 操作系统环境变量
- 命令行参数
- application.properties
- application.yml
- @ConfigurationProperties (prefix=”taco.orders”),比如要给A类的pageSize配置属性,配置文件中需要是taco.orders.pageSize