网站备案授权码,重庆工厂网站建设,手工制作的英文,互联网推广怎么找客户1.AOP 和动态代理与事务
AOP 大家已经很熟悉了吧#xff0c;Spring核心思想之一#xff0c;面向切面编程。
今天给大家说说aop#xff0c;他就是对 IOC容器里的对象#xff0c;进行方法的增强。
注意#xff0c;他只能增强 IOC容器内的bean#xff0c;通过自己new出来…1.AOP 和动态代理与事务
AOP 大家已经很熟悉了吧Spring核心思想之一面向切面编程。
今天给大家说说aop他就是对 IOC容器里的对象进行方法的增强。
注意他只能增强 IOC容器内的bean通过自己new出来的不能被代理
原理就是有接口就是JDKproxy没有接口就是CGLIB。
自定义切面切的注解也是注解标在IOC容器里的对象才能够代理它Spring管理的对象嘛。才支持被AOP的权利原理就是看看IOC容器中有没有这个类或者有没有被注解标记的方法有就创建代理类去代理当前类最后通过依赖注入到 别的对象属性中 供它使用。 再说说事务 Spring声明式事务也是通过AOP实现的。
如果事务AOP 和 环绕执行增强共同切了一个方法那么谁代理谁呢
正确答案是经过测试不管注解摆放的顺序都是Transaction在代理 增强类。
简单来说你环绕增强执行完真实对象的方法之后抛了异常 是在Spring事务代理范围之内的
会回滚事务
所以事务的代理是最后代理的里面不管你加了几层 AOP 都是最后 加的事务代理然后抛异常肯定能够回滚。
2.数据库时区
当使用 Mysql 8.0的时候。我们配置Springboot yml配置文件的时候需要配置时区这里的时区一定要和数据库配置一样的时区要不然数据库使用UTC时区Java默认时区为GMT8 东八区
会使数据库时间类型的传到Java上面来小时8导致时间不一致。
和Jackson原理一样在spingboot 接口controller 转JSON到前端默认以格林威治时间转化所以会 减8在yml文件配置Jackson 时区配置了 GMT8 保证格式与 Java默认时区一致就不会在转换时区的时候被增加或减少导致不必要的麻烦。
总结数据库时区和Java时区和Jackson时区保证一致就不会导致时间不一致的现象发生。
但是字符串不会受时区的印象比如mybatis plus 使用时间当参数你穿字符串的话是不会被 时区解析直接当字符串传入SQL然后进入数据库是原样的。
在数据库转换时区是在那一步是在SQL预编译将Date转化为时间戳然后转化为java.sql.Date 类的时候会以yml文件url后面的时区进行时区的转化时间戳就是格林威治到现在的毫秒值然后根据不同时区转化为不同的日期值嘛然后转化到UTC的话那就是正常GMT8时区 -8小时就是UTC这就是为什么我查出来的时间比我放入字符串的时间多8小时是因为它传上来的时间戳按照GMT8时区把原来的时间先加8小时才能和Java时区对上。但是你设置数据库时区为GMT8,时区一致了就不会有时区转化了。 转换原理
前端到controller没规定时区就是UTC ,然后转化为时间戳放到 Java里根据Java时区是GMT8所以Java时间就多了8小时,然后如果给了时区和GMT8一致 先减8 转化为时间戳到Java 转化为 GMT8在加回来。
数据库到Java同理。从Java Date转化时间戳少了8小时然后UTC的时区转化为数据库Java.sql.Date他不加回来了这就是为什么少了8小时
数据库传上来 Java.sql.Date类型你设置时区为UTC他不会减8小时变时间戳然后时间戳转化GMT8又加了8小时这就是为什么时间多了8个小时的原因。