如何定义一个新的 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 类并在运行时创建它的实例?的主要内容,如果未能解决你的问题,请参考以下文章