java – 在运行时创建简单的POJO类(字节码)(动态)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在运行时创建简单的POJO类(字节码)(动态),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1924字,纯文字阅读大概需要3分钟。
内容图文
我有以下情况..
我正在编写一些工具,对数据库运行用户输入的查询并返回结果.
最简单的方法是将结果返回为:List< String []>但我需要更进一步.
我需要创建(在运行时)一些带有某个名称的POJO(或DTO),并为它创建字段和setter和getter,并使用返回的数据填充它,然后将其返回给用户,生成.class文件…
所以这里的想法是如何在运行时创建简单的类(字节码)(动态)
我做了一个基本的搜索,发现了很多lib including Apache BCEL但是我觉得我需要更简单的东西……
你对那个怎么想的?
谢谢.
解决方法:
如果使用CGLib,使用getter和setter创建简单的POJO很容易:
public static Class<?> createBeanClass(
/* fully qualified class name */
final String className,
/* bean properties, name -> type */
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.addProperties(beanGenerator, properties);
return (Class<?>) beanGenerator.createClass();
}
测试代码:
public static void main(final String[] args) throws Exception{
final Map<String, Class<?>> properties =
new HashMap<String, Class<?>>();
properties.put("foo", Integer.class);
properties.put("bar", String.class);
properties.put("baz", int[].class);
final Class<?> beanClass =
createBeanClass("some.ClassName", properties);
System.out.println(beanClass);
for(final Method method : beanClass.getDeclaredMethods()){
System.out.println(method);
}
}
输出:
class some.ClassName
public int[] some.ClassName.getBaz()
public void some.ClassName.setBaz(int[])
public java.lang.Integer some.ClassName.getFoo()
public void some.ClassName.setFoo(java.lang.Integer)
public java.lang.String some.ClassName.getBar()
public void some.ClassName.setBar(java.lang.String)
但问题是:你无法对这些方法进行编码,因为它们在编译时不存在,所以我不知道这会对你有什么好处.
内容总结
以上是互联网集市为您收集整理的java – 在运行时创建简单的POJO类(字节码)(动态)全部内容,希望文章能够帮你解决java – 在运行时创建简单的POJO类(字节码)(动态)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。