将注释添加到在运行时生成的POJO类

时间:2017-08-30 17:33:54

标签: 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();
    }
}

1 个答案:

答案 0 :(得分:0)

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

如果您愿意接受替代方案,请查看Byte Byddy(我写的)。它是开源和Apache许可的,更现代的字节代码生成,其中&#34;更新&#34;注释等Java功能内置于生成API中。

要创建bean,您可以定义类:

firebase

这将使用getter和setter定义类型Class<?> type = new ByteBuddy() .subclass(BaseDataImport.class) .name(name) .defineProperty("foo", String.class) .annotateType(annotation) .make() .load(classLoader) .getLoaded(); 的属性foo,并使用提供的注释注释该类。