1. ClassWorking Utilities In Spring Framework
1.1. org.springframework.core.GenericCollectionTypeResolver
Helper class for determining element types of collections and maps. Mainly intended for usage within the framework, determining the target type of values to be added to a collection or map (to be able to attempt type conversion if appropriate). Only usable on Java 5. Use an appropriate JdkVersion check before calling this class, if a fallback for JDK 1.4 is desirable.
从javadoc中的说明就可以猜到,像getCollectionType(), getMapKeyType()和getMapValueType()之类的常用方法, 在这个类里是不会缺的。
org.springframework.core.GenericTypeResolver跟GenericCollectionTypeResolver类似, 只不过, 现在不是针对Collection类型, 而是针对一般的Generic类。
1.2. org.springframework.core.annotation.AnnotationUtils
AnnotationUtils填补了默认的反射API中有关Annotation相关的几个功能,比如, 使用默认的反射API你只能读取当前class上的Annotation,而通过AnnotationUtils, 我们则可以获取当前class继承层次上的所有标注的Annotation, 更多信息可以参考该类的Javadoc.
![[Tip]]() |
Tip
有关Annotation的继承, 这里可以总结几句:
-
如果Annotation是标注于Interface之上的话, 不管该Annotation类型是否标注了@Inherited这个Annotation, 被标注的Interface的实现类都不会“继承” 这一Annotation。 也就是说,标注于Interface上的Annotation,通过反射API只能在这个Interface上才能读取到这一Annotation。
-
如果Annotation是标注于Class之上的话, 分两种情况:
-
如果当前的Annotation类型被标注了@Inherited,那么, 标注了当前Annotation的Class的子类会获得当前Annotation的“继承”, 也就是说, 即使子类没有标注这个Annotation,通过subClass.getClass().getAnnoation(currentAnnotation)也会获得这个Annotation所持有的元数据信息。
-
如果这个Annotation没有被标注@Inherited,那么, 子类不会获得这种继承。
结合以上信息, 也就不难想到为什么Spring会倡导将Transactional之类的Annotation标注在具体的实现类上,而不是Interface之上了。
|
1.3. org.springframework.util.ClassUtils
在 org.apache.commons.lang.ClassUtils存在的前提下,有重新发明轮子之嫌, 不过, 还是有一些补足的, 用与不用完全看你个人口味啦。不过,千万别跟我提“绑定到XX框架”这样的论调, 除非你真的能够像古代那样做个自给自足的隐士!
1.4. org.springframework.util.MethodInvoker
Helper class that allows for specifying a method to invoke in a declarative fashion, be it static or non-static. Usage: Specify "targetClass"/"targetMethod" or "targetObject"/"targetMethod", optionally specify arguments, prepare the invoker. Afterwards, you may invoke the method any number of times, obtaining the invocation result. Typically not used directly but via its subclasses MethodInvokingFactoryBean and MethodInvokingJobDetailFactoryBean.
主要适用于对某个确定的方法调用多次的场景, 如果每次都是调用不同的对象上的不同的方法的话, 需要提供多个该类的实例。 如果是在Spring容器内使用的话, 大多数时候会是使用MethodInvokingFactoryBean或者MethodInvokingJobDetailFactoryBean这样的子类。
1.5. org.springframework.util.ReflectionUtils
这个类主要对Java ReflectionAPI进行了封装, 虽然它的javadoc中声明仅限于框架内部使用,不过如果你不介意的话, 也可以拿来一用吧!不过,后果自负,哈
通过Java标准Reflection API是取不到方法参数的名称的,要达到这个目的,除了可以通过读取class文件中的debug信息(可能在compile的时候没有启用), 也可以使用类似ASM这样的类库获得, 不过, Spring framework中已经对读取方法参数名称这一功能进行了抽象和实现,我们可以直接拿过来用, 这一抽象接口为org.springframework.core.ParameterNameDiscoverer。
ParameterNameDiscoverer主要有三个实现类:
-
LocalVariableTableParameterNameDiscoverer
-
PrioritizedParameterNameDiscoverer
-
AspectJAdviceParameterNameDiscoverer
其中, LocalVariableTableParameterNameDiscoverer为最常用的实现类, 它会使用ObjectWeb的ASM来读取方法参数名称。
![[Warning]]() |
Warning
LocalVariableTableParameterNameDiscoverer只能发现具体实现类的Class上的方法参数名称,对于接口类型的Class上的方法参数名称, 需要另寻他路,比如扫描接口的实现类并匹配相应方法,然后读取实现类相应方法的参数名称 ,或者直接通过Annotation标注相应的方法参数, 然后通过反射API读取等等。
|
PrioritizedParameterNameDiscoverer纯粹是借助于它所持有的多个ParameterNameDiscoverer来完成方法参数名称的获取工作,它会按照顺序请求它所持有的ParameterNameDiscoverer来完成每一个ParameterNameDiscoverer本应完成的任务。
AspectJAdviceParameterNameDiscoverer主要用于集成了AspectJ的SpringAOP Advice实现类, 通过它的Javadoc可以获得进一步的详细信息。
以下是LocalVariableTableParameterNameDiscoverer和ParaNamer的简单使用代码示例:
Class<SubscriptionServiceImpl> clazz = SubscriptionServiceImpl.class;
Method method = ReflectionUtils.findMethod(clazz, "listAllSubscription",new Class<?>[]{String.class, Integer.class,Date.class,Date.class} );
ParameterNameDiscoverer pmDiscoverer = new LocalVariableTableParameterNameDiscoverer();
String[] parameterNames = pmDiscoverer.getParameterNames(method);
// BytecodeReadingParanamer reader = new BytecodeReadingParanamer();
// String[] parameterNames = reader.lookupParameterNames(method);
for(String parameterName : parameterNames)
{
System.out.println(parameterName);
}
3. classpath auto scanning 功能
我们知道,Spring2.5之后引入了类路径的自动扫描功能,Spring框架为这一功能提供了很好的扩展点,我们可以通过BeanNameGenerator或者自定义的org.springframework.core.type.filter.TypeFilter来定制自动扫描的行为, 比如:
<context:component-scan base-package="..." name-generator="..">
<context:exclude-filter type="annotation" expression="..."/>
<context:include-filter type="annotation" expression="..."/>
</context:component-scan>
除此之外,我们实际上还可以较为独立的形式来使用Spring框架提供的这一类路径自动扫描功能,或者说, class的元数据信息读取功能。 这一功能的核心类为MetadataReader, 以下代码给出了使用这一核心类的简单示例代码:
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
// or new SimpleMetadataReaderFactory()
MetadataReader reader = metadataReaderFactory.getMetadataReader("cn/spring21/code/samples/spring/controller/SimpleController");
AnnotationMetadata annotationMD = reader.getAnnotationMetadata();
ClassMetadata clazzMD = reader.getClassMetadata();
System.out.println(annotationMD.hasAnnotation("org.springframework.stereotype.Component"));
System.out.println(clazzMD.getClassName());
ResourcePatternResolver主要用于加载相应的Resources, 这里就是class文件, MetadataReaderFactory用于构造相应的MetadataReader,它有两个实现类,即SimpleMetadataReaderFactory和CachingMetadataReaderFactory。通过相应MetadataReaderFactory实现类获得可用的MetadataReader之后,就可以根据MetadataReader的getAnnotationMetadata()和getClassMetadata()返回的值对象来提取自己需要的信息了。
分享到:
相关推荐
Jwebap通过ClassWorking实现轨迹注入,无需修改原有代码,避免了对JVM或OS的依赖。已经实现的ClassEnhancer和PackageEnhancer可对指定类和包进行注入。 ### 9. 插件架构 Jwebap采用插件模型,将轨迹收集、管理与...
Jwebap使用ClassWorking技术来注入轨迹,这一方法不需修改系统代码,也不会依赖JVM或OS的本地接口,从而避免了相关的依赖性。Jwebap通过ClassEnhancer和PackageEnhancer来对指定的类和包进行注入,确保了轨迹的产生...
内容概要:本文详细解析了Apollo 7.0行为预测模块的关键升级点,主要包括新增的Inter-TNT模式、VECTORNET_EVALUATOR以及JOINTLY_PREDICTION_PLANNING_EVALUATOR。这些组件通过引入轨迹交互模拟、动态归一化、联合预测规划等创新机制,显著提高了障碍物轨迹预测的准确性和场景适应性。特别是在处理复杂交通场景如高速公路变道、十字路口交汇时表现出色。此外,文中还介绍了增量式特征更新机制的应用,有效减少了CPU占用,提升了系统的实时性能。 适用人群:适用于对自动驾驶技术感兴趣的开发者、研究人员和技术爱好者,尤其是那些希望深入了解Apollo平台行为预测模块工作原理的人群。 使用场景及目标:①帮助读者理解Apollo 7.0行为预测模块的技术细节;②指导开发者如何利用这些新技术提升自动驾驶系统的预测精度;③为研究者提供有价值的参考资料,促进相关领域的进一步探索。 其他说明:文章不仅提供了详细的代码解读,还包括了实际应用场景中的效果对比,使读者能够全面掌握新旧版本之间的差异。同时,附带的思维导图有助于快速理清各个子模块之间的调用关系和数据流向。
内容概要:本文详细介绍了利用西门子S7-200 PLC和MCGS组态软件构建智能交通灯控制系统的方法。首先阐述了系统的硬件配置,包括选用的PLC型号、输入输出设备及其具体的功能分配。接着深入探讨了梯形图编程的核心逻辑,如定时器嵌套、车流量检测与响应机制,确保红绿灯能够根据实际情况灵活调整。此外还讲解了MCGS组态界面的设计要点,通过图形化方式呈现交通状况并提供人机交互功能。最后分享了一些实际调试过程中遇到的问题及解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC编程和组态软件有一定了解的人群。 使用场景及目标:适用于城市交通管理部门或相关科研机构进行智能交通系统的研究与开发;旨在提高道路交叉口的通行效率,减少拥堵现象。 其他说明:文中不仅提供了详细的理论指导,还包括了许多实践经验教训,对于初学者来说非常有价值。同时提到一些进阶话题,如加入V2V通信模块的可能性,为未来研究指出了方向。
内容概要:本文详细介绍了光伏特性曲线模型的基本概念及其在Matlab和Simulink中的实现方法。首先阐述了光伏电池的电流-电压(I-V)和功率-电压(P-V)曲线的基础理论,包括理想二极管方程及相关参数的意义。接着展示了如何使用Matlab编写代码来计算并绘制简单的I-V曲线,随后探讨了Simulink环境下构建光伏特性曲线模型的方法,强调了图形化界面的优势。此外,还讨论了分布式光伏系统的特点,通过修改基础模型以适应多电池串联或并联系统的需求。文中不仅提供了具体的代码实例,还分享了一些实用的经验和技术细节,如温度系数、辐照度变化对模型的影响等。 适合人群:从事光伏系统研究的技术人员、高校相关专业师生、对光伏建模感兴趣的工程爱好者。 使用场景及目标:①理解和掌握光伏电池的工作原理及其数学模型;②学会使用Matlab和Simulink进行光伏特性曲线的建模与仿真;③能够分析不同环境条件下光伏系统的性能表现,为优化设计提供依据。 其他说明:文章中包含了大量详细的代码片段和操作指南,有助于读者快速上手实践。同时提醒读者关注模型参数的选择与调整,确保仿真结果贴近实际情况。
BergSoft NextSuite 是一个强大的 Delphi 和 C++ Builder 组件套件。NextGrid 是一个易于使用的组件,具有设计时(带可视化列编辑器)和运行时的方法和属性理解。NextGrid 具有卓越的 StringGrid 功能和标准的 Delphi ListView。NextDBGrid 是一个基于著名的 NextGrid 组件的强大 Delphi 数据网格和 C++ Builder。
中职计算机软件工程.pdf
内容概要:本文详细介绍了如何利用Verilog语言在FPGA平台上实现高性能伺服驱动系统。主要内容涵盖多个关键模块,包括电流环、坐标变换、速度环、位置环、电机反馈接口、SVPWM生成和编码器协议。每个模块都通过具体的Verilog代码片段展示了其功能和实现方式。电流环部分重点讲解了电流反馈和电压输出的计算;坐标变换部分讨论了从三相静止坐标系到两相旋转坐标系的转换;速度环和位置环则采用了PID控制算法实现对电机的速度和位置的精确控制;电机反馈接口和编码器协议确保了电机位置信息的准确获取;SVPWM模块生成了高效的三相PWM波形。这些模块共同协作,实现了对电机的高效、精准控制。 适合人群:具备一定硬件开发基础,特别是熟悉FPGA和Verilog编程的技术人员,以及从事电机控制和伺服系统开发的研究人员。 使用场景及目标:适用于需要深入了解和掌握FPGA平台上的伺服控制系统设计的专业人士。主要目标是帮助读者理解各模块的工作原理及其在实际应用中的实现方法,提升他们在伺服驱动系统设计方面的能力。 阅读建议:由于涉及大量具体代码和技术细节,建议读者在阅读过程中结合实际电路图和仿真工具进行理解和验证。此外,可以尝试自己动手实现部分模块,以便更好地掌握相关技术和优化设计。
ffmepg windows 下载详细教程2025年(最新)
内容概要:本文探讨了一种新型的超表面设计,能够在保持结构对称性的同时实现偏振无关的连续域束缚态(BIC)。传统的BIC设计通常需要破坏结构对称性,从而导致偏振依赖的问题。新的设计方案通过调整几何参数和模式耦合,使得不同偏振模式能够自然耦合并形成稳定的BIC。文中详细介绍了使用COMSOL进行仿真的步骤,包括参数扫描、模式特征分析以及实验验证。结果显示,新机制不仅能在较宽的偏振范围内保持高Q因子,而且对制造误差具有较高的容忍度。 适合人群:从事光学、电磁学研究的专业人士,尤其是对超表面设计和BIC感兴趣的科研人员。 使用场景及目标:适用于需要高精度、高稳定性和宽偏振适应性的应用场景,如LiDAR系统、光电探测、生化传感等领域。目标是提供一种创新的设计思路和技术实现路径,突破传统BIC设计的局限。 其他说明:文中提供了详细的MATLAB和COMSOL代码片段,帮助读者理解和复现实验结果。此外,强调了新机制在实际制备中的优势,特别是对制造误差的高容忍度。
内容概要:本文详细探讨了永磁同步电机(PMSM)控制系统中的关键技术,尤其是最大转矩电流比(MTPA)控制和弱磁控制。首先介绍了MTPA的基本原理,包括基于查表法和公式的实现方式,以及应对温度变化引起的参数漂移的方法。接着讨论了速度环PI控制器的设计,强调了防积分饱和机制的重要性。对于弱磁控制,则着重讲解了电压极限圆的概念及其在过调制情况下的应用,同时提供了具体的Python和C语言代码示例。此外,还涉及到了SVPWM过调制处理的技术细节,如调制比超过1后的波形调整策略。最后分享了一些实际工程项目中的经验教训和技术挑战。 适合人群:从事电机控制领域的工程师、研究人员以及相关专业的学生。 使用场景及目标:帮助读者深入了解PMSM控制系统的内部运作机制,掌握MTPA和弱磁控制的具体实现方法,提高解决实际问题的能力。 其他说明:文中引用了多篇学术文献作为理论支持,并附上了大量源代码片段供参考学习。
MiniTool重点技术共享Windows数据恢复软件.doc
内容概要:本文详细介绍了ADS54J60高速采集卡FMC子卡的设计与实现。该子卡支持4通道16位1G采样率,涵盖了硬件架构设计(原理图、PCB布局)、FPGA源码实现(Verilog代码)等方面。硬件方面,着重讨论了电源管理、时钟分配、信号完整性等问题;FPGA部分,则展示了ADC控制逻辑、数据同步及传输优化的具体实现方法。此外,文中还分享了许多实践经验,如电源纹波控制、LVDS接口配置、数据同步算法等,帮助开发者避免常见陷阱。 适合人群:从事高速数据采集系统的硬件工程师、FPGA开发人员、嵌入式系统设计师。 使用场景及目标:适用于需要高性能数据采集的应用场合,如通信系统、雷达信号处理等。目标是帮助读者掌握ADS54J60 FMC子卡的设计与实现,从而加速项目开发进程。 其他说明:文中提供的设计文件和代码可以直接用于制板生产,大大缩短了从设计到应用的时间。同时,作者还分享了一些实用技巧和经验教训,有助于提高系统的稳定性和性能。
内容概要:本文详细介绍了Linux摄像头驱动的工作原理及其开发流程。首先解释了摄像头驱动的重要性,它是Linux系统与摄像头硬件交互的桥梁,使系统能够识别并操作摄像头。接着深入探讨了V4L2框架作为Linux摄像头驱动的核心,它为视频设备提供了标准化接口,简化了应用与硬件间的交互。文章还具体分析了USB摄像头的工作流程,包括图像捕捉、信号转换、数据传输等环节。开发指南部分则强调了前期准备的重要性,如理解Linux内核架构、USB子系统原理及掌握C语言编程技能。随后阐述了开发步骤,涵盖编写内核模块、注册USB驱动程序以及适配不同摄像头。最后讨论了常见问题及解决方案,如驱动加载失败和图像显示异常,并展望了Linux摄像头驱动在未来智能安防和物联网等领域的应用前景。 适用人群:对Linux系统有一定了解,尤其是对设备驱动开发感兴趣的开发者和技术爱好者。 使用场景及目标:①帮助读者理解Linux摄像头驱动的工作原理,包括V4L2框架和USB摄像头的数据传输过程;②指导读者进行Linux摄像头驱动的开发,从前期准备到具体实现步骤;③解决开发过程中可能出现的常见问题,如驱动加载失败和图像显示异常。 其他说明:本文不仅提供了理论知识,还结合实际案例详细讲解了开发流程中的各个环节,旨在帮助读者更好地掌握Linux摄像头驱动的开发技巧,同时展望了其未来在智能安防和物联网等领域的应用潜力。
内容概要:本文详细介绍了利用MATLAB进行光伏板向蓄电池充电仿真的全过程。主要内容涵盖光伏电池模型建立、Buck电路设计及其参数选择、PWM信号生成、闭环控制系统设计等方面。文中不仅提供了具体的MATLAB代码示例,还深入探讨了如何通过调整电感、电容值及PWM占空比等参数来优化充电效果,确保输出电压稳定在10.8-14.4V之间,并能提供80A的大电流。此外,文章还讨论了针对不同充电阶段采用不同的充电策略,如强充、缓充和浮充,以保护蓄电池免受过充损害。 适合人群:从事电力电子、新能源技术研究的专业人士,尤其是那些对光伏系统有兴趣的技术人员。 使用场景及目标:适用于需要理解和掌握光伏板向蓄电池充电原理和技术细节的人群。目标是帮助读者学会构建完整的充电系统仿真模型,理解各部件的工作机制,并掌握优化方法。 其他说明:文中提到的一些具体数值和参数设置基于特定应用场景,实际应用时可根据实际情况进行适当调整。同时,文中提供的MATLAB代码片段可以直接应用于MATLAB环境,方便读者动手实践。
vika.cnAirtable
内容概要:本文详细介绍了如何使用 COMSOL Multiphysics 对变压器进行时域和频域分析,探讨了磁致伸缩、噪声和洛伦兹力的影响。文中通过具体的代码示例展示了如何设置时域和频域的边界条件,定义磁致伸缩系数,计算洛伦兹力,并通过多物理场耦合模拟变压器的振动和噪声。此外,还讨论了一些常见的仿真技巧和注意事项,如相位对齐、材料非线性特性和边界条件设置等。 适合人群:从事电力系统研究、变压器设计和仿真的工程师和技术人员。 使用场景及目标:适用于希望深入了解变压器内部物理机制及其对外界因素响应的专业人士。通过掌握这些方法,可以优化变压器设计,减少噪声,提升电力系统的稳定性和可靠性。 其他说明:文章不仅提供了理论背景,还给出了实用的代码片段和仿真技巧,帮助读者更好地理解和应用 COMSOL 进行变压器建模。
分析师预测偏差/分析师预测误差/分析师预测准确度/分析师盈余预测误差/分析师盈余 预测准确度 分析师预测分歧度/分析师盈余预测分歧度 方法一,分母为实际每股盈余( 此帖) 方法一,分母为实际每股盈余 分析师预测偏差(FERROR)是指分析师的盈 余预测值与实际盈余值的平均偏差 分析师预测分歧度(FDISP1和FDISP2)是 指每个分析师最近一次盈余预测值的标准差 本文参考周国开等的度量方法,首先剔除了分 析师预测公布日晚于年报公布日的样本,如果同一分析师在一年内对同一家公同发布了多份 预测,则仅保留该分析师在那年的最后一次预测值样本;其次剔除了每股实际收益和每股预 测收益缺失的样本;最后运用公式(1)和公式度量分析师预测偏差,运用公式(2)和公 式(3)度量分析师预测分歧度。 其中: FEPSit为i公司当年的分析师预测每股 盈余 Mean(FEPSi,t)为公司i第t年的所有证券分析师最近一次每股盈余预 测的平均值 Std(FEPSi,t)为公司i第t年的所有证券分析师最近一次每股盈 余预测的标准差 MEPSit为i公司当年的实际每股盈余 样本选择:全部A股200 1-2022年数
内容概要:本文深入探讨了永磁同步电机(PMSM)滑模观测器无感控制技术。首先介绍了滑模观测器的基本原理,通过构建观测器估计电机的状态变量,特别是转子位置和速度。文中展示了滑模观测器的C语言和MATLAB代码实现,详细解释了滑模控制律、符号函数的作用以及如何通过滑模面获取转子位置和速度。接着讨论了滑模观测器在实际应用中的优缺点,如低成本、高可靠性和抗扰动能力强,但也存在抖振等问题。针对这些问题,提出了改进措施,如引入滤波器和平滑处理方法。最后,通过具体案例展示了滑模观测器在工业现场的实际效果,强调了其在复杂环境下的稳定性和鲁棒性。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是对永磁同步电机无感控制感兴趣的工程师。 使用场景及目标:适用于需要高精度、低成本电机控制的场合,如电动汽车、智能家居等领域。目标是掌握滑模观测器的工作原理和技术实现,提高电机控制系统的性能和可靠性。 其他说明:本文提供了详细的代码示例和调试技巧,帮助读者更好地理解和应用滑模观测器技术。同时,文中还分享了一些实际工程中的经验和教训,有助于解决实际问题。
内容概要:本文详细介绍了利用Ansys Maxwell和OptiSlang进行永磁同步电机多目标尺寸优化的方法和技术细节。首先,通过参数化建模将电机的关键尺寸(如磁钢宽度、槽开口宽度、气隙长度)设为变量,实现自动化调整。接着,利用OptiSlang设置多目标优化,包括最小化转矩脉动、最大化效率以及最小化有效材料质量,并加入必要的约束条件(如平均转矩和温升)。文中展示了具体的优化流程,包括参数空间采样、参数耦合设置、异常处理等。此外,还讨论了一些实际应用中的注意事项,如参数范围的安全余量、网格剖分的稳定性等。最终,通过帕累托前沿分析得到了多个优化设计方案,验证了多参数联动优化的有效性和优越性。 适合人群:从事电机设计、电磁场仿真、优化算法等领域工作的工程师和技术人员。 使用场景及目标:适用于需要对永磁同步电机进行多目标尺寸优化的设计项目,旨在提高电机性能(如效率、转矩)、降低成本、优化材料使用等。 其他说明:文章提供了丰富的实战经验和技巧,帮助读者更好地理解和应用多目标优化方法。同时,强调了参数化建模和多参数联动的重要性,避免了传统单目标优化的局限性。