SpringBoot知识复习
特点
独立运行的 Spring 项目
内嵌 Servlet 容器
提供 starter 简化 Maven 配置
自动配置 Spring
准生产的应用监控
无代码生成和 xml 配置(*)
缺点
版本迭代速度很快,一些模块改动很大
尽量选择稳定版本
由于不用自己做配置,报错时很难定位。
学会自己定位问题及阅读源码的能力
缺少注册、发现等外围方案
集成成熟的相关第三方组件
常用注解
@SpringBootApplication 启动类注解
@ComponentScan 扫描@Componment修饰的类,实例化到容器中
@Configuration 配置类注解
@EnableAutoConfiguration 自动加载@Configuration修饰的配置类
@Component 需要将所修饰的类实例化到容器中
@Bean 管理第三方jar包内的类加载到容器中,一般配合@Configuration使用
@Autowired 参数类注解,用于装载容器中的实例 默认按类型装配
@Resource 参数类注解,用于装载容器中的实例 默认按照名称进行装配
@PropertySource 加载局部配置文件 只能识别properties文件
@ConfigurationProperties 配置属性 将配置文件中属性值绑定到bean里
@Value 读取配置并给实体类中的属性赋值 读取Spring的Environment中的值
条件类注解
@ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件
@ConditionalOnClass:当SpringIoc容器内存在指定Class的条件
@ConditionalOnExpression:基于SpEL表达式作为判断条件
@ConditionalOnJava:基于JVM版本作为判断条件
@ConditionalOnJndi:在JNDI存在时查找指定的位置
@ConditionalOnMissingBean:当SpringIoc容器内不存在指定Bean的条件
@ConditionalOnMissingClass:当SpringIoc容器内不存在指定Class的条件
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnSingleCandidate:当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalOnWebApplication:当前项目是Web项目的条件
web接口开发相关注解 Spring-MVC
@RestController 控制层 实例化到容器 是@Controller+@ResponseBody组合 返回json等
@Service 业务层 实例化到容器
@Repository 持久层 实例化到容器
@Controller 配合模板使用 一般返回的是模板页面路径或跳转到哪里
@ResponseBody 方法注解 Controller层方法返回值转为json格式数据
http接口类型定义
@RequestMapping 配置请求路径 可以修饰类、方法
@GetMapping get请求 一般是获取信息、下载链接业务请求
@PostMapping post请求 一般是新增或复杂查询的业务请求
@PutMapping put请求 修改请求 全量修改
@PatchMapping patch请求 修改请求 put的一种 增量修改
@DeleteMapping delete请求 删除请求
注意:也可以方法使用@RequestMapping(value = “/abc”,method = RequestMethod.XXX),不建议使用 还是用@*Mapping好一些 提高代码可读性
常用starter
spring-boot-starter-thymeleaf | 使MVC Web applications 支持Thymeleaf |
---|---|
spring-boot-starter-mail | 使用Java Mail、Spring email发送支持 |
spring-boot-starter-data-redis | 通过Spring Data Redis 、Jedis client使用Redis键值存储数据库 |
spring-boot-starter-web | 构建Web,包含RESTful风格框架SpringMVC和默认的嵌入式容器Tomcat |
spring-boot-starter-activemq | 为JMS使用Apache ActiveMQ |
spring-boot-starter-data-elasticsearch | 使用Elasticsearch、analytics engine、Spring Data Elasticsearch |
spring-boot-starter-aop | 通过Spring AOP、AspectJ面向切面编程 |
spring-boot-starter-security | 使用 Spring Security |
spring-boot-starter-data-jpa | 通过 Hibernate 使用 Spring Data JPA |
spring-boot-starter | Core starter,包括 自动配置支持、 logging and YAML |
spring-boot-starter-freemarker | 使MVC Web applications 支持 FreeMarker |
spring-boot-starter-batch | 使用Spring Batch |
spring-boot-starter-data-solr | 通过 Spring Data Solr 使用 Apache Solr |
spring-boot-starter-data-mongodb | 使用 MongoDB 文件存储数据库、Spring Data MongoDB |
三种Bean配置方式
Xml: 老的程序中经常见到, springboot也支持导入xml
注解: 在类定义时通过@Service, @Controller, @Repository, @Component 声明为 Spring Bean
Java 配置: 通过@Configuration+@Bean 实现的 该方式引入了一个 Config 类, 在类中通过方法函数声明 bean 对象, 而 Pojo 类定义不加@Component 之类的注解, Config 类需要加上@Configuration 注解, Config 类中的 bean 方法需要加上@Bean 注解.@Configuration 等同于 xml 配置中的<beans> </beans> 标签, 需说明的是@Component 其实也是@Component 的一个子注解,@Bean 等同于 xml 配置中的 <bean> </bean>标签. @Bean 用来注解一个函数, 该函数应该一个 Bean 对象, Bean 对象的名称是方法名.
最佳实践: 注解配置方式和 Java 配置方式没有孰优孰劣, 理论上是可以相互替换的, 但可以总结一个最佳实践, 全局性的配置使用 Java 配置 (比如数据库相关配置, MVC 相关配置), 业务 Bean 配置使用注解配置, 尽量少用 Xml 配置方式.
工程结构说明
全局异常拦截
跨域设置
swagger集成配置
MybatisPlus集成配置
其他工具类说明
如何单元测试-Junit
配置文件说明
AOP和IOC例子