SpringFramework之DefaultAopProxyFactory

    Spring版本是5.0.4.release.

    Springaop中的DefaultAopProxyFactory,先上一张图,如下图1

         

                                                                                            图1

    Springaop中使用DefaultAopProxyFactory来创建代理,它决定了何时使用JDK还是Cglib代理,实现如下List-1所示:

    List-1

public class DefaultAopProxyFactory implements AopProxyFactory, Serializable {

	@Override
	public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
		if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
			Class<?> targetClass = config.getTargetClass();
			if (targetClass == null) {
				throw new AopConfigException("TargetSource cannot determine target class: " +
						"Either an interface or a target is required for proxy creation.");
			}
			if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
				return new JdkDynamicAopProxy(config);
			}
			return new ObjenesisCglibAopProxy(config);
		}
		else {
			return new JdkDynamicAopProxy(config);
		}
	}

	/**
	 * Determine whether the supplied {@link AdvisedSupport} has only the
	 * {@link org.springframework.aop.SpringProxy} interface specified
	 * (or no proxy interfaces specified at all).
	 */
	private boolean hasNoUserSuppliedProxyInterfaces(AdvisedSupport config) {
		Class<?>[] ifcs = config.getProxiedInterfaces();
		return (ifcs.length == 0 || (ifcs.length == 1 && SpringProxy.class.isAssignableFrom(ifcs[0])));
	}
}

    List-1中,目标对象拥有接口实现且没设置proxyTargetClass=true,则使用JDK代理,此外如果目标对象是个接口或者是代理类,则使用JDK代理,否则使用Cglib,有些人说设置了ProxyTargetClass=true会使用JDK代理,正常情况下是正确的,不过从源码来看不一定——即使设置了ProxyTargetClass=true,如果目标对象类是个接口或者是代理类,则使用使用的是JDK代理。

Reference

  1. https://github.com/spring-projects/spring-framework/tree/5.0.x

 

转载于:https://my.oschina.net/u/2518341/blog/3073752

【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。 该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。 阅读详情

相关推荐

ST7789P3初始化配置

【代码】ST7789P3初始化配置。

zqq_1314的博客 4153

Spring-AOP源码-ProxyFactory

可以看到,这里还没有组装拦截器链条,只是有一层缓存的逻辑。用于作为方法结果返回的,也就是真正的执行器链对象。那么执行代理对象的任何方法都会执行到当前对象的。在ProxyFactory使用篇章中有提到过,是Spring-AOP中非常核心的类,如果不懂。99%的情况下都是这个分支,例如我们直接使用。一个优化点,如果提前检查过了,那么就不再通过。方法了,代理对象的任何方法执行前都会执行。可以基于类和方法判断是否进行切入,类创建了代理对象,且第三个参数。,还有一些其他的属性,例如。接口下的实现类转换为。

zzzj的博客 788

深入浅出:利用NXP S32K3xx的HSE模块实现OTA双分区(AB Swap)与安全回滚

本文深入解析NXP S32K3xx HSE模块在汽车电子OTA双分区架构中的工程实践,详细介绍了HSE模块如何通过AB Swap双分区机制实现固件安全升级与毫秒级回滚。内容涵盖内存重映射硬件原理、分区切换异常处理及寄存器级诊断方法,为开发高可靠嵌入式系统提供实战指导。

weixin_30919429的博客 795

Spring系列之DefaultAopProxyFactory

AOP代理类最终都是有AopProxyFactory创建的org.springframework.aop.framework.AopProxyFactoryorg.springframework.aop.framework.DefaultAopProxyFactory配置没有开启优化且没有设置proxyTargetClass="true"且没有配置除了SpringProxy之外的代理接口或者指定的...

lemon 711

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

保姆级教程:用CH34xSerCfg工具修改USB转串口芯片的VID/PID,避免驱动冲突

本文详细介绍了如何使用CH34xSerCfg工具修改USB转串口芯片的VID/PID,解决驱动冲突问题。通过实战案例和配置技巧,帮助开发者高效管理嵌入式设备,避免常见的USB设备识别问题,提升开发效率。

weixin_30924239的博客 224

spring复习:(36)AopProxyFactory接口的默认(唯一)实现: DefaultAopProxyFactory

实现了AopProxyFactory中定义的唯一接口:createAopProxy,根据所代理的目标是否实现了接口而选择JdkDynamicAopProxy对象还是ObjenesisCglibAopProxy对象来返回。

amadeus_liu2的博客 443

PCB布局布线要求及多层电路板叠加原则

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考本文主要针对PCB布局布线中的要点进行了总结,并对多层电路板的叠加原则进行了解释。

Ka_wyb的博客 2938

Spring AOP 创建代理ProxyFactory

1、ProxyFactory类图 2、ProxyFactory 获取代理对象 public Object getProxy() { returncreateAopProxy().getProxy(); } public Object getProxy(@Nullable ClassLoader classLoader) { returncreateAopProx...

lemon 418

给STM32供电,别只接VDD和GND!VBAT、VDDA这些引脚不接会怎样?

本文深入解析STM32电源设计中VBAT与VDDA引脚的关键作用,揭示仅连接VDD和GND可能导致的ADC精度下降、RTC功能异常等问题。通过实测数据对比不同连接方案,提供包括滤波电路设计、PCB布局布线和双电源自动切换在内的实用解决方案,帮助开发者优化系统稳定性与性能。

weixin_30521161的博客 629

关于StartAI本地部署相关问题解答

很多小伙伴们都有接入自己本地SD的需求,对此小编整理了一些相关问题~

HDJ9387的博客 940

AOP学习1

前提:本文属于源码探索,完全不懂,大家随便看看 1. 关键类DefaultAopProxyFactory 顾名思义,DefaultAopProxyFactory是AopProxy类的默认工厂,需要生产很多AopProxy对象,生产对象的方法为createProxy。需要注意以下几个事项。 1. 只能生产两个代理类中的一个,JDK或者CGLIB 2.何时创建CGLIB? * <p>Creates a CGLIB proxy if one the following is true...

weixin_39304739的博客 239

保姆级教程:用Cesium的Primitive API实现火箭发射全流程动画(含代码避坑)

本文详细介绍了如何使用Cesium的Primitive API实现火箭发射全流程动画,包括模型控制、关节动画和精细时序管理。通过实战代码示例和性能优化技巧,帮助开发者高效构建高复杂度航天仿真系统,显著提升三维可视化效果与运行效率。

weixin_42565652的博客 213

【源码】Spring AOP 11 AopProxyFactory AopProxy

【源码】Spring AOP 10 AopProxyFactory AopProxy前言AopProxyFactoryDefaultAopProxyFactoryAopProxyJdkDynamicAopProxyJdkDynamicAopProxy.invokeCglibAopProxyDynamicAdvisedInterceptor总结序列图get the proxyproxy invoke method参考 前言 这章节我们介绍代理创建器工厂 AopProxyFactory 和具体的代理创建器 Ao

小水牛的博客 516

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

org.springframework.aop.framework相关源码类

本文主要来自org.springframework.aop.framework当前包的相关类 ProxyConfig private boolean proxyTargetClass = false; private boolean optimize = false; boolean opaque = false; boolean exposeProxy = false; private boolean frozen = false; public void copyFrom(ProxyConfi

kongkong的专栏 947

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SpringFramework之ProxyFactory

Spring版本是5.0.4.release. ProxyFactory在Springaop中占有举足轻重的地位,用来间接创建代理,如下List-1所示,我们给ServiceImpl创建代理。 List-1 public interface IService { ...

choubayan4320的博客 317

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring AOP 代理机制

来源:http://www.cnblogs.com/hustyangli/archive/2008/09/01/1281319.html Spring Framework reference 2.0.5 参考手册中文版 6.6. 代理机制 中是这样写的   Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议尽量使用JDK的动态代理)

zzyymaggie的专栏 394

Spring源码分析之——AOP动态代理的选择

上一篇《Spring源码分析之——AOP的原理及初始化细节》讲到AOP的原理和细节,这一篇补充一下动态代理的选择代码细节。 我们知道动态代理分两种,JDK动态代理和Cglib动态代理,那么Spring选用的哪个呢? 右半部分可以看到AopProxy下面有Cglib和JDK两种,至于创建哪种,是左边工厂DefaultAopProxyFactory负责创建的,带着这个图看源码。 1、后置处...

做最亮的星星 1021

04.Spring Framework 源码解析之 AOP

1. 环境搭建 代码已经上传至 https://github.com/masteryourself/spring-framework,工程是 tutorial-spring-aop 2. 源码解析 详细的源码注释可参考 https://github.com/masteryourself/spring-framework 2.1 组件导入 2.1.1 流程分析 @EnableAspectJ...

masteryourself 301

spring aop实现的过程

之前看过,再分析一次spring aop过程 org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory org.springframework.beans.factory.support.DefaultListableBeanFactory org.springframework.aop.fr

qustmomo的博客 400

【Spring】Spring中AOP解析 完结 创建代理类,并执行代理逻辑源码

【Spring】Spring中AOP解析 中 AOP的具体实现流程 【Spring】Spring中AOP解析 上 两种动态代理方式与ProxyFactory代理工厂 回到 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary 方法 拿到所有的advice的流程已经走完,接下来就是创建代理类了,画张图,整理下流程 接下来看 createProxy 方法 可以看到spring底层使用了Pr

纸上得来终觉浅,绝知此事要躬行 1370

GraalVM打包实战:除了Hello World,你的Spring Boot项目能直接编译成EXE吗?

本文详细介绍了如何使用GraalVM将Spring Boot项目编译为原生EXE文件,涵盖环境配置、项目改造、反射处理及性能优化等关键步骤。通过实战案例,帮助开发者解决实际业务中的编译难题,显著提升应用启动速度和内存效率。

weixin_30367873的博客 557

Spring IOC容器与声明式事务实现原理详解

控制反转(IOC)和面向切面编程(AOP)是Spring框架的两大核心技术支柱。IOC容器通过依赖注入管理对象生命周期,而AOP则实现了横切关注点的模块化。声明式事务管理正是这两项技术的经典应用场景,通过@Transactional注解简化了事务编程。其底层原理基于动态代理和拦截器链,Spring会为带有事务注解的Bean创建代理对象,并通过TransactionInterceptor实现事务边界的自动管理。这种设计使得开发者可以专注于业务逻辑,同时确保数据一致性。在分布式系统和微服务架构中,理解事务传播行

weixin_33881140的博客 393

spring的aop_spring aop源码解读

spring aop介绍面向切面编程是一种编程思想,解决的场景是将项目中一些零散的,通用的逻辑从原业务逻辑的硬编码调用中脱离出来,并在运行时再动态的编织进去。这就是面向切面技术,如日志,注解等功能就经常采用切面技术。spring aop是spring的一项核心功能,采用的是动态代理的思想,主要有jdk自身的动态代理和cglib动态代理两种。说到代理,我们看下代理模式的类图:进入正题我们知道了spr...

weixin_39849418的博客 67

Spring干货---AOP

springAOP

zhzhxian的博客 204

Spring框架代理模式深度解析:从静态代理到动态代理与AOP实战

代理模式是面向对象编程中一种核心的结构型设计模式,其核心原理是在不修改原始对象代码的前提下,通过一个代理对象来控制对原对象的访问,从而提供额外的功能增强。在Java生态中,代理模式主要分为静态代理和动态代理两大类,其中动态代理又包含基于接口的JDK动态代理和基于继承的CGLIB动态代理两种技术实现。该模式的技术价值在于实现了核心业务逻辑与横切关注点(如日志、事务、安全)的彻底解耦,极大地提升了代码的可维护性和复用性。这一特性使其成为实现AOP(面向切面编程)思想的基石技术,广泛应用于企业级框架中。在Spri

weixin_34348174的博客 486
上一篇: SpringFramework之ReflectiveMethodInvocation
下一篇: SpringFramework之ProxyFactory
choubayan4320
博客等级 码龄11年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值