java - 为运行时生成的 POJO 类添加注解

标签 java spring cglib

我使用下面的代码在运行时生成 POJO 类。我想向此类添加注释,是否可以向生成的类添加类级别注释,或者我应该使用任何其他解决方案来生成类

import java.util.Map;

import org.springframework.cglib.beans.BeanGenerator;
import org.springframework.cglib.core.NamingPolicy;
import org.springframework.cglib.core.Predicate;

/**
 * @author dpoddar
 *
 */
public class DynamicClassUtils {

    public static Class<?> createBeanClass(
            final String className,
            final Map<String, Class<?>> properties){

        final BeanGenerator beanGenerator = new BeanGenerator();

        /* use our own hard coded class name instead of a real naming policy */
        beanGenerator.setNamingPolicy(new NamingPolicy(){
            @Override public String getClassName(final String prefix,
                    final String source, final Object key, final Predicate names){
                return className;
            }});

        beanGenerator.setUseCache(true);
        beanGenerator.setSuperclass(com.xxx.BaseDataImport.class);

        BeanGenerator.addProperties(beanGenerator, properties);
        return (Class<?>) beanGenerator.createClass();
    }
}

最佳答案

cglib 是一个相当老的库,不支持注释。

如果您愿意接受替代方案,请查看 Byte Byddy (我写的)。它是开源的并获得 Apache 许可,并且是字节码生成的更现代的版本,其中注释等“较新”的 Java 功能内置于生成 API 中。

为了创建 bean,您可以定义一个类,例如:

Class<?> type = new ByteBuddy()
  .subclass(BaseDataImport.class)
  .name(name)
  .defineProperty("foo", String.class)
  .annotateType(annotation)
  .make()
  .load(classLoader)
  .getLoaded();

这将定义一个带有 getter 和 setter 的 String 类型的属性 foo,并使用提供的注释对该类进行注释。

关于java - 为运行时生成的 POJO 类添加注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966546/

相关文章:

Java:找不到类:net.sf.cglib.proxy.MethodInterceptor

java - 抽象类和公共(public)代码

java - JAXB:当返回类型是接口(interface)时,如何使用字段名称进行编码?

java - 在工作流重新配置时禁止进入工作线程

java - Spring AOP : confirming CGLIB proxy behaviour

java - 不使用接口(interface)创建 Mixin

java - 正则表达式删除命名空间并将首字母转换为小写

spring - 如何防止hibernate5在jackson序列化json对象时延迟获取?

spring - org.apache.tomcat.websocket.WsWebSocketContainer 无法转换为 io.undertow.websockets.jsr.ServerWebSocketContainer

java - 使用 AJAX 将 json 数据发送回 java Rest 服务时出现 415 错误