zoukankan      html  css  js  c++  java
  • CGLib动态创建对象和属性

    import java.lang.reflect.Field;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    import net.sf.cglib.beans.BeanGenerator;
    import net.sf.cglib.core.ReflectUtils;
    import net.sf.cglib.beans.BeanGenerator;
    
    public class TestCGLib {
    
    	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
    		BeanGenerator beanGenerator = new BeanGenerator();
    		
    		beanGenerator.addProperty("username", String.class);
    		beanGenerator.addProperty("password", String.class);
    		Object obj = beanGenerator.create();
    		
    		Field[] fields = obj.getClass().getDeclaredFields();
    		
    		PropertyDescriptor[] pds = ReflectUtils.getBeanProperties(obj.getClass());
    		int i = 0;
    		for (PropertyDescriptor pd : pds) {
    			System.out.println(pd.getName() + ":" + pd.getDisplayName());//password:password
    			pd.setValue(pd.getName(), i);
    			System.out.println(pd.getValue(pd.getName()));
    			i++;
    		}
    		
    		for (Field field : fields) {
    			System.out.println(field);//private java.lang.String net.sf.cglib.empty.Object$$BeanGeneratorByCGLIB$$558c3ebf.$cglib_prop_username
    			System.out.println(field.getName());//$cglib_prop_username
    			System.out.println(field.getType());//class java.lang.String
    			String setMethodName = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
    			System.out.println(setMethodName);//set$cglib_prop_username
    			field.setAccessible(true);
    			field.set(obj, "111");
    			System.out.println(field.get(obj));//111
    			
    		}
    	}
    }

    引用的jar包如下

    <!-- https://mvnrepository.com/artifact/cglib/cglib-nodep -->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib-nodep</artifactId>
        <version>3.2.5</version>
    </dependency>
    

      

     

    参考 http://blog.csdn.net/ajun_studio/article/details/6807181

  • 相关阅读:
    NOI-1.1-04输出保留3位小数的浮点数
    百练7619-合影效果-2015正式D题-简单排序&输出格式
    百练6376-二维数组右上左下遍历-2015正式C题
    C++ 开发环境配置
    go语言 http学习
    Git 命令及分支管理学习
    配置go语言编辑环境
    DNS的过程
    Split Array into Consecutive Subsequences
    组委会正在为美团点评CodeM大赛的决赛设计新赛制
  • 原文地址:https://www.cnblogs.com/umgsai/p/6890651.html
Copyright © 2011-2022 走看看