ARTS的初衷
Algorithm: 主要是为了编程训练和学习。
Review:主要是为了学习英文
Tip:主要是为了总结和归纳在日常工作中所遇到的知识点。学习至少一个技术技巧。在工作中遇到的问题,踩过的坑,学习的点滴知识。
Share:主要是为了建立影响力,能够输出价值观。分享一篇有观点和思考的技术文章
https://www.zhihu.com/question/301150832
声明一个AdvisedSupport类,用于保存被代理对象和拦截方法的元数据对象
创建织入点AopProxy,可以通过getProxy方法获取代理后的对象。使用CGLIB生成动态代理,生成Enhancer实例,并指定用于处理代理业务的回调类
完成了织入之后,我们要考虑另外一个问题:对什么类以及什么方法进行AOP?对于“在哪切”这一问题的定义,我们又叫做“Pointcut”。Spring中关于Pointcut包含两个角色:ClassFilter和MethodMatcher,分别是对类和方法做匹配。Pointcut有很多种定义方法,例如类名匹配、正则匹配等,但是应用比较广泛的应该是和AspectJ表达式的方式,Spring借鉴了这种方式
万事俱备,只欠东风!现在我们有了Pointcut和Weave技术,一个AOP已经算是完成了,但是它还没有结合到Spring中去。怎么进行结合呢?Spring给了一个巧妙的答案:使用BeanPostProcessor
BeanPostProcessor是BeanFactory提供的,在Bean初始化过程中进行扩展的接口。只要你的Bean实现了BeanPostProcessor接口,那么Spring在初始化时,会优先找到它们,并且在Bean的初始化过程中,调用这个接口,从而实现对BeanFactory核心无侵入的扩展
那么我们的AOP是怎么实现的呢?我们知道,在AOP的xml配置中,我们会写这样一句话:
<aop:aspectj-autoproxy/>
它其实相当于:
<bean id="autoProxyCreator" class="org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator"></bean>
AspectJAwareAdvisorAutoProxyCreator就是AspectJ方式实现织入的核心。它其实是一个BeanPostProcessor。在这里它会扫描所有Pointcut,并对bean做织入
如何分析Mysql中的死锁
MySQL的InnoDb引擎是行级锁,需要注意的是,这不是对记录进行锁定,而是对索引进行锁定。在UPDATE\DELETE操作时,MySQL不仅锁定WHERE条件扫描过的所有索引记录,而且会锁定相依的健值,也就是所谓的next-key locking,如语句update liangsonghua_me_blog_post set update_time = now() where id > 10000会锁定所有主键大于等于1000的所有记录。另外我们知道通过非主键查询回表时,会先通过二级索引也就是非簇索引查找相应的叶子节点,获得行的主键值,然后使用主键去聚簇索引中查找数据行。实际上当非簇索引(non-cluster index)记录被锁定时,相关的的簇索引记录也需要被锁定才能完成相应的操作
作者BLOG:www.liangsonghua.me
作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解