在运行时(动态)创建简单的POJO类(字节码)
我有以下情况..
我正在编写一些工具,对数据库运行用户输入的查询并返回结果。
最简单的方法是将结果返回为:
List<String[]>
但我需要更进一步。
我需要创建(在运行时)一些名称的POJO(或DTO),并为其创建字段和setter和getter,并使用返回的数据填充它,然后将其返回给用户,生成.class
文件...
所以这里的想法是如何在运行时创建简单的类(字节码)(动态)
我做了一个基本的搜索,发现很多lib包括Apache BCEL但是我觉得我需要更简单的东西......
你对那个怎么想的?
谢谢。
没有找到相关结果
已邀请:
6 个回复
岭取
测试代码:
输出: 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) 但问题是:你无法对这些方法进行编码,因为它们在编译时不存在,所以我不知道这会对你有什么好处。
久坡
你为什么要这样做?有些方法可以比使用常规地图更有效地使用
样式对象。 另一种方法是使用Velocity生成Java源代码并使用Compiler API编译代码。使用它很痛苦所以我在这里写了一个包装Essence JCF使用这种方法的唯一读取优势是你可以轻松调试生成的代码。 (该库可以选择将java代码保存到调试器可以找到它的位置,以便当您单步执行生成的代码时)
熊融炭臀陛
或
实际上是一种更清洁,更实用的设计。
队辅坟阮阶
让我们编写一个PojoGenerator,它动态生成给定类名的Class对象和一个包含所需属性的map:
而已! 使用PojoGenerator非常简单。让我们生成一些POJO,通过反射输出所有方法,设置然后得到一些属性:
执行以上将导致以下控制台输出:
苏髓骗撩
棘手的部分是将POJO分解回来,但反思可以帮助你:
从bean,cloneable或POJO获取泛型bean的示例代码:
EJB的示例用法:
EJB有一个这样的接口:
您可以想象ejb实现的样子,现在我们正在构建预处理语句并调用它们,但我们可以使用标准,或者像hibernate或者其他任何我想要的东西。 这是一个粗略的例子(有些人不喜欢这部分)。在示例中,我们有一个表格,其中包含第三范式的数据。为此,bean字段必须与表列名匹配。 toLowerCase()调用以防万一这是一个正在使用的REAL bean,这将搞砸名称匹配(MyField与getMyfield)。这部分可能会更好一点。特别是顺序和不同应该是标志或其他东西。可能还会出现其他边缘条件。当然,我只需编写此ONCE,并且为了提高性能,没有什么能阻止您使用更精确的数据接收器来提高性能。
嘘崇蔡对