`
leeqoo
  • 浏览: 121658 次
社区版块
存档分类
最新评论

使用cglib动态创建java类

    博客分类:
  • java
 
阅读更多
简单样例—动态生成bean
  样例说明:建立一个动态实体bean,使用cglib动态加入属性,和相应的get,set方法。

需要导入cglib-nodep-2.2.jar

been类

Java代码  收藏代码

    <strong>public class CglibBean {  
    /** 
      * 实体Object 
      */  
    public Object object = null;  
      
    /** 
      * 属性map 
      */  
    public BeanMap beanMap = null;  
      
    public CglibBean() {  
      super();  
    }  
      
    @SuppressWarnings("unchecked")  
    public CglibBean(Map propertyMap) {  
      this.object = generateBean(propertyMap);  
      this.beanMap = BeanMap.create(this.object);  
    }  
      
    /** 
      * 给bean属性赋值 
      * @param property 属性名 
      * @param value 值 
      */  
    public void setValue(String property, Object value) {  
      beanMap.put(property, value);  
    }  
      
    /** 
      * 通过属性名得到属性值 
      * @param property 属性名 
      * @return 值 
      */  
    public Object getValue(String property) {  
      return beanMap.get(property);  
    }  
      
    /** 
      * 得到该实体bean对象 
      * @return 
      */  
    public Object getObject() {  
      return this.object;  
    }  
      
    @SuppressWarnings("unchecked")  
    private Object generateBean(Map propertyMap) {  
      BeanGenerator generator = new BeanGenerator();  
      Set keySet = propertyMap.keySet();  
      for (Iterator i = keySet.iterator(); i.hasNext();) {  
       String key = (String) i.next();  
       generator.addProperty(key, (Class) propertyMap.get(key));  
      }  
      return generator.create();  
    }  
    }  
    </strong>  

 

 

 

 

再写一个测试类
Java代码  收藏代码

    package com.infotech.cglibTest;  
      
    import java.lang.reflect.Method;  
    import java.util.HashMap;  
      
    /** 
     * Cglib测试类 
     * @author cuiran 
     * @version 1.0 
     */  
    public class CglibTest {  
          
          
          
        @SuppressWarnings("unchecked")  
        public static void main(String[] args) throws ClassNotFoundException {  
      
            // 设置类成员属性  
            HashMap propertyMap = new HashMap();  
      
            propertyMap.put("id", Class.forName("java.lang.Integer"));  
      
            propertyMap.put("name", Class.forName("java.lang.String"));  
      
            propertyMap.put("address", Class.forName("java.lang.String"));  
      
            // 生成动态 Bean  
            CglibBean bean = new CglibBean(propertyMap);  
      
            // 给 Bean 设置值  
            bean.setValue("id", new Integer(123));  
      
            bean.setValue("name", "454");  
      
            bean.setValue("address", "789");  
      
            // 从 Bean 中获取值,当然了获得值的类型是 Object  
      
            System.out.println("  >> id      = " + bean.getValue("id"));  
      
            System.out.println("  >> name    = " + bean.getValue("name"));  
      
            System.out.println("  >> address = " + bean.getValue("address"));  
      
            // 获得bean的实体  
            Object object = bean.getObject();  
      
            // 通过反射查看所有方法名  
            Class clazz = object.getClass();  
            Method[] methods = clazz.getDeclaredMethods();  
            for (int i = 0; i < methods.length; i++) {  
                System.out.println(methods[i].getName());  
            }  
        }  


转自:http://ckwang17.iteye.com/blog/963881
分享到:
评论
1 楼 sesamfox 2016-12-15  
缺少addProperty和create方法

相关推荐

    cglib动态生成java类

    cglib动态生成java类

    cglib创建代理类.rar

    springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书;...2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单

    java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】

    java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】 /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用...

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public Object intercept(Object obj, Method method, Object[] ...

    cglib.jar下载

    通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 二、CGLIB原理 CGLIB原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。...

    cgLib与JDK动态代理的用法

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等...动态代理:在程序运行时,运用反射机制动态创建而成。

    JDK动态代理(AOP)使用及原理分析视频教程课件

    动态代理是使用jdk的反射机制,创建对象的...jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。

    你必须会的 JDK 动态代理和 CGLIB 动态代理

    我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。 通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。 静态...

    Java 动态代理 Demo

    Java Jdk 和 Cglib 动态代理 Demo 1.通过 JDK 反射形式创建动态代理 2.通过CGLIB基于ASM字节码技术创建动态代理 3.Java 反射原理演示 4.CGLib 依赖如下: &lt;groupId&gt;cglib &lt;artifactId&gt;cglib &lt;version&gt;3.3.0 ...

    SpringAOP的实现机制(底层原理)、应用场景等详解,模拟过程的实例

    本资源将深入探讨Spring框架中使用的两种关键的动态代理方式:JDK动态代理和CGLib动态代理。这两种代理方式在Spring AOP中起到关键作用,用于实现横切关注点的切面编程。通过学习它们的原理和实际应用,您将能够更好...

    Java动态代理方法详解.docx

    jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理 1.知道动态代理能做什么 ? 可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。 程序开发中的意思。 ...

    基于java的企业级应用开发:JDK动态代理.ppt

    * * * * JDK动态代理 JDK动态代理 JDK动态代理是通过java.lang.reflect.Proxy 类来实现的,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象。对于使用业务接口的类,Spring默认会使用JDK动态代理来实现...

    Java 基础核心总结 +经典算法大全.rar

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

    Spring框架+SpringAOP动态代理

    Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于代理没有实现接口的类或final类。CGLIB(Code Generation Library)是一个代码生成的类库,可以在运行时动态生成一个目标类的子类,并...

    Java 基础面试题

    29. JDK动态代理和CGLIB动态代理 30. 反射机制以及反射的方式 31. 类加载有几种方式 32. Class.forName()和ClassLoader.loadClass()的区别 34. 如何防止创建的类名不能java为已有类名,Java加载双亲委派机制 35....

    cglib,关于代理的一个jar

    CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好...通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。

    java开发常用jar包

    CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、...

    java6string源码-dynamic-proxy:利用ASM、CGLIB、ByteBuddy、Javassist和JDKDynamicP

    通过使用运行时代码生成技术,您可以在不定义Class的情况下创建一个实现某些特定接口或扩展类的实例。 通过直接启动ProxyCreator实例,您可以获得利用 ASM、Javassist、ByteBuddy、CGLIB 和传统 JDK 动态代理的特定...

    2020年春招最新阿里Java面试题集锦

    jdk和cglib实现的AOP实际上会在内存生成动态代理对象,还有什么其他办法实现AOP?经提示答出AspectJ以及实现原理 Spring中的对象的作用域 Singleton对象引用Prototype会发生什么 项目中怎样使用微服务? 两个服务...

Global site tag (gtag.js) - Google Analytics