spring 依赖注入时,什么时候会创建代理类 有的会创建代理类来替代目标类的实现.比如有事务注解啊 有的直接使用目标类.啥拦截配置都没有.…
问题来源 以前一直有个疑惑,为什么我创建的controller中注入的service类有时候是代理类,有时候是普通javabean,当时能力不够,现在已经有了点经验就大胆跟了跟源码,看看到底咋回事. 首先看看问题现象: a1:service是代理类,并且是CGLIB类型代理 a2:service是代理类,并且是jdk 动态代理 b:serivce不是代理类,而是普通类 问题分析 我对service类进行了以下的测试:(前提开启事务注解<tx:annotation-driven/>) 1)ser…
背景 今天发现一个奇怪的问题,有一个类是用的@Repository注解标识注入的,并且这个类并没有配置任何带代理和aop配置.但是得到的这个类不是一个原生类,而是一个代理类,如果换成了Component注解这时候得到的类就是原生类 .下面分别演示下这两种情况. 先用@Repository注入得到的class是下面的: class com.workit.demo.service.ServiceA$$EnhancerBySpringCGLIB$$4ee00fa9 然后@Component注入得到的c…
github地址 https://github.com/1367356/GradleTestUseSubModule/tree/master/CreateMyFrameWork 1:定义一些规则…
Spring依赖注入 新建PersonIDao 和PersonDao底实现Save方法: public interface PersonIDao { public void save(); } public class PersonDaoImpl implements PersonIDao{ @Override public void save() { System.out.println("我是dao的Save方法"); } } 在Bean.xml中注入PersonIDao,并将Pe…
1.接口 Class<?> resourceClass 2.获取builder BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(resourceClass); 3.获取接口对应的动态代理class Class<?> targetProxyClass = Proxy.getProxyClass(XXX.class.getClassLoader(), new Class[]{reso…
一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 二.主要用途 将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务…
AOP 代理类的创建 入口:AnnotationAwareAspectJAutoProxyCreator#postProcessAfterInitialization 和 AnnotationAwareAspectJAutoProxyCreator#getEarlyBeanReference /** * 代理配置:保证所有的代理创建者都有一致的属性配置 */ public class ProxyConfig implements Serializable { /** use serialVers…
JDK和CGLib动态代理区别 JDK动态代理:利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类, 在调用具体方法前调用InvokeHandler来处理. CGLib动态代理:利用ASM开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理. 何时使用JDK和CGLib: 1)如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP. 2)如果目标对象实现了接口,可以强制使用CGLIB实现AOP. 3)如果目标…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,我们开始分析 OpenFeign 的生命周期,结合 OpenFeign 本身的源代码.首先是从接口定义创建 OpenFeign 代理开始.我们这里只关心同步客户端,因为异步客户端目前还在实现中,并且在我们的项目中,异步响应式的客户端不用 OpenFeign,而是用的官方的 WebClient 创建 OpenFeign 代理 创建 OpenFeign 代理,主要分为以下几步: 使用…