1. 请求体是json数据时,加上@RequestBody注解,用java对象接收。
2.关于测试类junit ,如果你想用加上@SpringBootTest 注解的测试类,你就必须将它跟 启动类放在同一包下。
但如果你不想用测试类,那么可以随意去放。
2.事务回滚
关于错误的捕获,不要跟事务回滚弄混了。
统一错误捕获使用的是
@RestControllerAdvice
@ExceptionHandler
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler
public Result ex(Exception e){
e.printStackTrace();
log.info("捕获异常{}",e.getMessage());
return Result.error("默认异常已被返回到前端");
}
}
3.事务传播行为
事务传播特性的默认值是 Required ,即有则加入,无则新建。
例如:上图的案例。
共用一个事务时(Required)。第①失效时,第②也会失效。日志就不会加到数据库里面。
当不共用一个事务时(required_new),调用②时,会先将当前的事务挂起,并去创建一个新事 务,②这个方法成功执行后,将新事物进行提交,
接着恢复已挂起的事务,即使①发生了异常,也不会影响②的执行。
4.面向切面编程,要想配置一个切面,你得加上@component注解和@Aspect注解,
我记得还要开一个代理,来表示开启自动生成代理对象。但springboot好像不用。
环绕通知的返回值比较特殊。
4.通知类型
记得其他通知没有返回值,但对于加了环绕通知注解的@Around ,是需要返回值的,这个返回值即为目标方法的返回值。
5.通知的执行顺序 (可以使用@order注解)
6.切入点表达式
原来不知道的: ①可以用接口 ② ..可以匹配任意类型的参数
7.另一种切点表达式 的形式:太神奇了
例:
①定义一个接口,作为一个标记
② 在需要增强 的方法上加上 标志性接口
③在切面类上 使用 @annotation(标志性接口)
这样就会对加上 标志性接口的方法 进行 增强
8.自己对ProceedingJointPoint和JointPoint的看法
解决下图的疑问,是根据bean来找实现类的,不会同时出现两个。
9.@Documented注解是什么意思?
这个其实挺简单的,因为 在看老杜的课时, 他讲了两种获取 applicationContext的方式,一种是根据配置文件,一种是根据配置类。这样就获得了IOC容器。
要想获取IOC容器中的bean,可以看下图 有三种方式。
下图中,使用@SpringBootTest注解 来进行测试。
原来不知道ApplicationContext 可以通过@Autowired注入进去
singleton prototype 单例和多例
学习完bean的获取、bean的作用域之后,接下来我们再来学习第三方bean的配置。
之前我们所配置的bean,像controller、service,dao三层体系下编写的类,这些类都是我们在项目当中自己定义的类(自定义类)。当我们要声明这些bean,也非常简单,我们只需要在类上加上@Component以及它的这三个衍生注解(@Controller、@Service、@Repository),就可以来声明这个bean对象了。 但是在我们项目开发当中,还有一种情况就是这个类它不是我们自己编写的,而是我们引入的第三方依赖当中提供的。
利用Maven依赖传递的特性.
如下图引入
4.自动配置
当在同一个类中既有@SpringBootApplication注解,又有 @ComponentScan注解,那么@ SpringBootApplication 注解里自带的@ComponentScan注解 会被覆盖。
因此对于启动类来说,它也是一个配置类,可以声明第三方bean
将子工程的共有的依赖抽取到父工程中
注意是在父工程进行 版本锁定,锁定后并不会引入相关依赖,而是去 约束子工程的版本。
Maven的聚合
私服