JAVA已经提供了在runtime期间动态创建“代理类”的机制,并且我们在实际开发工作中,特别是涉及到中间件开发的同学,经过会遇到“在runtime期间动态创建Class以及相应实例”的情况。比如调用者传递了“User”、“Order”等各种类型的对象,但是你的中间件程序需要对这些对象统一处理和封装,甚至需要在运行时为这些不同类型的instance“增加”property字段等。此时,我们可以用Apache Commons Beanutils来帮助我们解决相关问题。如下仅为代码示例:
private Object buildDynaBean(Object parameterObject) throws Exception{ Class clazz = parameterObject.getClass(); PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(clazz); int length = pds.length; //在创建的动态类中,增加一些额外的property。此后下游的方法可以获取。 DynaProperty[] dps = new DynaProperty[length + 2];//我们新增2个自定义的property for(int i=0;i < length;i++) { PropertyDescriptor pd = pds[i]; DynaProperty dp = new DynaProperty(pd.getName(),pd.getPropertyType()); dps[i] = dp; } //for router dps[length] = new DynaProperty("callTime", Date.class); dps[length + 1] = new DynaProperty("counter",Integer.class); //你应该把clazz对应的DynaClass缓存起来,不必要每次都创建。 DynaClass dynaClass = new BasicDynaClass(clazz + ".$Dyna", null, dps); DynaBean dynaBean = dynaClass.newInstance(); BeanUtils.copyProperties(dynaBean, parameterObject); //初始化external属性值,你应该根据不同的类,设定不同的属性。 dynaBean.set("callTime",new Date()); dynaBean.set("counter",1); return dynaBean; }
相关推荐
6. **国际化支持**:BeanUtils工具包可以与ResourceBundle结合使用,实现基于不同语言和地区的国际化(i18n)处理。 在"java学习笔记——javaweb之BeanUtils、EL、JSTL"这篇博客中,作者可能详细讲解了如何在Java Web...
例如,`copyProperties()`方法会创建一个`PropertyUtilsBean`实例,通过反射查找并调用目标Bean的setter方法来设置属性值。同时,它还处理了可能抛出的异常,如`IllegalAccessException`和`InvocationTarget...
通过反射机制,BeanUtils能动态地识别和设置属性,支持动态表单的创建。 3. ** DynaActionForm**: 这是Struts中的动态表单类,相比于传统的ActionForm,DynaActionForm不需要预先定义字段。它的字段可以在运行时...
BeanUtils库是基于JavaBeans规范的,JavaBeans是一种符合特定规则的Java类,它们通常具有公有的getter和setter方法,用于封装和解封装对象的数据。 **BeanUtils的核心功能:** 1. **属性设置和获取:** BeanUtils...
- **对象复制**:在业务逻辑中,需要创建与原有对象属性相同的实例时,可以使用BeanUtils的复制功能。 - **属性操作**:当需要动态设置或获取JavaBean的属性时,BeanUtils可以大大减少代码量。 3. **集成与应用**...
实例161 反射与动态代理 209 7.3 常见的未检查型异常 210 实例162 算数异常 210 实例163 数组存值异常 211 实例164 数组下标越界异常 212 实例165 空指针异常 213 7.4 常见的已检查型异常 214 实例166 类未发现异常 ...
总的来说,"通过反射机制实现动态表单"这个主题涵盖了Java编程中的一项高级技术,它涉及到类的元数据、对象的创建与操作,以及动态UI生成。通过理解和运用反射,开发者可以创建出更灵活、适应性强的软件系统。
3. 接着,通过DynaClass实例创建DynaBean对象。DynaBean就像一个空容器,等待我们填充属性值。 4. 最后,我们可以使用PropertyUtils.setProperty()或直接调用DynaBean的set()方法来设置属性值。设置完属性后,我们...
1. **日志适配器**:允许开发者编写与特定日志实现无关的代码,如Log4j、Java内置的日志API(java.util.logging)或logback。 2. **易插拔**:只需更改配置,就可以轻松地切换不同的日志实现,使得应用程序的可维护...
通过digester,可以轻松地将XML配置文件的内容映射到这些Java对象,实现配置文件的动态加载和对象的自动创建。 总结起来,Apache Commons Digester是一个强大的工具,能够帮助Java开发者以声明式的方式处理XML到...
本篇将详细介绍一个基于Hibernate封装的增删改查工具类,该工具类整合了util、comm.util以及beanutils等库,旨在提高开发效率,降低代码复杂度,方便开发者快速地获取session和sessionFactory。 首先,让我们理解...
**IdentityMap** 类提供了一种基于对象引用而非哈希码的映射实现。 ##### LRUMap **LRUMap** 类提供了一种最近最少使用(Least Recently Used)策略的映射实现。 ##### MultiKeyMap **MultiKeyMap** 类提供了一...
反射的概述:Java反射机制是指在运行状态中,程序可以获取到关于类、接口、字段和方法的完整信息,并能动态地创建对象和调用其方法。这一机制最早由编程人员Smith在1982年提出。通过反射,开发者可以在不知道具体...
本篇文章将基于标题"spring 个人小结 源码分析机制原理"及描述,深入探讨Spring的核心机制、源码分析以及创建Bean的过程。 首先,Spring的BeanUtils组件在处理Bean时,有一个重要的区别:Apache的BeanUtils支持`...
具体实现中,可以使用`Class`类的`forName()`方法获取类对象,然后通过`newInstance()`创建实例。接着,通过`Field`类获取类的属性,并使用`setAccessible(true)`允许访问私有属性。最后,使用`set()`方法,结合`...
实例中展示了如何在Spring中应用AOP,首先定义了一个`Sleepable`接口和其实现类`ChenLliNa`,然后创建了一个增强类`SleepHelper`,它实现了`MethodBeforeAdvice`和`AfterReturningAdvice`接口,分别表示前置通知和...