如何定义一个新的 Java 类并在运行时创建它的实例?

Posted

技术标签:

【中文标题】如何定义一个新的 Java 类并在运行时创建它的实例?【英文标题】:How to define a new Java class and create its instances at runtime? 【发布时间】:2012-10-08 06:23:46 【问题描述】:

我想在运行时使用一些输入信息定义一个新的 Java 类,例如,来自 Files.readAllBytes(Paths.get(path));,然后通过一些 ORM 或持久性 API(MyBatis、@987654326)将此类的对象映射到关系数据库@)。是否有可能做到这一点,如果可以,如何实现(哪些库、工具等)?我自己的想法是使用Jythonmetaclasses,但我认为有更简单的解决方案。

【问题讨论】:

【参考方案1】:

你可以使用The Compiler API来做到这一点

这是一个例子 - http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/

【讨论】:

您可能对 jpa 中的 hibernate / EntityManagerFactory 中的任何现有 SessionFactory 有问题,因为它们在实例化时会进行大量绑定,并且通常无法在实例化后注册类。在这些情况下,您可能必须重建 SessionFactory/EntityManagerFactory 取决于你如何实例化它。一个典型的用例是使用 Spring 通过 LocalSessionFactoryBean 类为您完成。这在内部创建了一个 Configuration 对象,并使用它通过“buildSessionFactory”方法构造 SessionFactory。因此,如果您想按照您的建议动态添加类,您需要重新构建配置对象,添加新类,然后重新构建 SessionFactory。这意味着对旧类的任何引用(通常在 dao 类中)都不会映射新类(另外这也可能会出现事务管理问题)。 ps:有解决方法,其中之一可能涉及使用将委托给 SessionFactory 的动态代理。然后,您可以重建底层的 SessionFactory 并告诉代理在那里委派它的方法。但是,这涉及大量工作,并且对于某些人来说可能是一个过于复杂的解决方案。

以上是关于如何定义一个新的 Java 类并在运行时创建它的实例?的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d 如何创建继承与 ccsprite的类并在项目中使用

如何在一行代码里启动多个线程

如何从 .cs 文件加载类

如何更改元素的 CSS 类并在单击时删除所有其他类

Java创建枚举类并定义使用枚举项

SqlAlchemy 将新字段添加到类并在表中创建相应的列