我使用下面的代码在运行时生成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();
}
}
答案 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
,并使用提供的注释注释该类。