本来写者写好发布了,结果没有发出去,吐槽一下!!!
前言:与OOP开发中的代码逻辑对比,在这些之上而下的过程中会产生写横切性问题而这些横切问题与我们逻辑业务员关系不大,会散落在代码各个地方,造成难以维护。
AOP的编程思想就是把这些横向问题和主业务逻辑分开,从而解耦。
有个问题:
写者回答一下init才是代理发生。
上代码:
要是测试代码运行时间就会暴露出:与OOP开发中的代码逻辑对比,在这些之上而下的过程中会产生写横切性问题而这些横切问题与我们逻辑业务员关系不大,会散落在代码各个地方,造成难以维护等问题。
下面AOP登场:
1.添加依赖…写者懒就省略辽:
debug(建议用idea debug):
可以看到是动态代理改一点就会成为Cglib;
注解源码:
这里也可以更换;
原理:
两种代理区别:在Spring Framework都用到了,JDK动态代理只能针对已经实现了接口的类,Cgilb动态代理针对类实现代理在内存上动态生成一个子类,子类继承当前类,子类覆盖当前类的方法,在Spring里面两者都用到了,spring中如何动态切换这两种代理?在代理Bean时首先看是否实现一个接口,实现了接口的情况下spring会使用JDK动态代理,一个类没有实现接口会使用Cglib动态代理,在spring中可以指定配置文件强制使用Cglib动态代理,Cglib性能会高一点,Cgilb底层asm字节码技术;
源码分析:
从头看到尾三天三夜也不行。
设置dubug(强烈用idea):
核心源码:
判断一个类没有实现接口会使用Cglib动态代理(对照写者上面发的原理来看);
springioc的过程;
因本人谈恋爱了(要哄老婆),下会详解源码(读者可以对照写者发的原理和源码来debug)!!!