Java 有没有办法强制在运行时加载类

Java 有没有办法强制在运行时加载类,java,Java,我有一种情况,我有一个注册表类,某些类必须为系统注册它们自己。因为我正在编写一个API,所以在运行之前我不一定知道这些类是什么,所以我的解决方案是在每个类中使用一个静态块,让它自己注册 当然,问题是静态块在初始化每个类之前不会运行,并且因为没有对每个单独类的显式引用,所以它们永远不会被初始化。第二十二条军规 那么,是否有任何方法或注释可以确保在启动时初始化类而不显式引用它 例如,Spring在运行时使用注释或其任何子类(如果有的话)来为带注释的类执行此操作。为此,您可以使用spring,自己实现

我有一种情况,我有一个注册表类,某些类必须为系统注册它们自己。因为我正在编写一个API,所以在运行之前我不一定知道这些类是什么,所以我的解决方案是在每个类中使用一个静态块,让它自己注册

当然,问题是静态块在初始化每个类之前不会运行,并且因为没有对每个单独类的显式引用,所以它们永远不会被初始化。第二十二条军规


那么,是否有任何方法或注释可以确保在启动时初始化类而不显式引用它

例如,Spring在运行时使用注释或其任何子类(如果有的话)来为带注释的类执行此操作。为此,您可以使用spring,自己实现这样的功能,或者使用专用库,如
scannotation


如果您决定研究spring,那么可以使用bean standalone来扫描具有给定注释的类

如果您没有在某种容器环境中运行(例如,使用OSGI、Spring、Guice等),那么没有明确的方法。您可以采用JDBC的方法,在这种方法中,特定JDBC驱动程序库的用户必须确保在使用之前对驱动程序进行了初始化

i、 必须有人跑。
Class.forName(“org.postgresql.Driver”),将加载org.postgresql.Driver类。在该类中,您可以有一个静态初始化器,该初始化器还可以加载/注册您需要的所有其他类。

您可以调用
class.forName(“com.example.MyClass”)
以确保该类已初始化吗?还有另一个
类。forName
方法将
initialize
标志作为参数。正如我所说,我的代码事先并不知道该类。如果我可以显式地调用它,我就不会有问题=)您可以使用Java属性或配置文件列出类名,以便自己加载它们吗?或者,您可以使用一个
@Singleton
bean注释,它是一种新的会话bean,保证在特定的Java虚拟机(JVM)中为应用程序实例化一次?@Singleton是EJB3.1,所以超出了我的范围:/Nice idea,但在这种情况下,我被困在EJB3.0中。EJB3.0是我唯一能保证的容器。这些类在EJB上下文中不是显式的,但EJB3也没有初始值设定框架,除非您想计算servletcontextlistener。