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

时间:2011-10-28 07:40:19

标签: java

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

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

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

2 个答案:

答案 0 :(得分:1)

例如,

Spring,在运行时使用@Component注释或任何if子类,对scan进行注释类。您可以使用spring来实现此功能,或者使用专用库,例如​​scannotation

如果您决定查看spring,可以使用bean ClassPathScanningCandidateComponentProvider standalone来扫描具有给定注释的类。

答案 1 :(得分:1)

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

即。有人必须运行,例如 Class.forName("org.postgresql.Driver");,它将加载org.postgresql.Driver类。在该类中,您可以拥有一个静态初始化程序,它还可以加载/注册您需要的所有其他类。