我使用下面的代码在运行时生成 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/