java有没有办法强制在运行时加载类
我有一种情况,我有一个注册表类,某些类必须为系统注册它们自己。因为我正在编写一个API,所以在运行之前我不一定知道这些类是什么,所以我的解决方案是在每个类中使用一个静态块,让它注册自己
当然,问题是静态块在每个类初始化之前不会运行,而且因为没有对每个单独类的显式引用,所以它们永远不会被初始化。第二十二条军规
那么,有没有任何方法或注释可以确保在启动时初始化一个类而不显式地引用它
你可以在下面搜索框中键入要查询的问题!
我有一种情况,我有一个注册表类,某些类必须为系统注册它们自己。因为我正在编写一个API,所以在运行之前我不一定知道这些类是什么,所以我的解决方案是在每个类中使用一个静态块,让它注册自己
当然,问题是静态块在每个类初始化之前不会运行,而且因为没有对每个单独类的显式引用,所以它们永远不会被初始化。第二十二条军规
那么,有没有任何方法或注释可以确保在启动时初始化一个类而不显式地引用它
# 1 楼答案
例如,Spring在运行时使用^{} 注释或其任何子类来scan注释带注释的类。您可以使用spring来实现这一点,为自己实现这样的功能,或者使用一个专用的库,比如
scannotation
如果决定研究spring,可以使用bean ^{} standalone来扫描具有给定注释的类
# 2 楼答案
如果您没有在某种容器环境中运行(例如使用OSGI、Spring、Guice等),如果不明确,目前还没有通用的方法。您可以采用JDBC的方法,在这种方法中,特定JDBC驱动程序库的用户必须确保在使用之前对驱动程序进行了初始化
例如,必须有人逃跑。
Class.forName("org.postgresql.Driver");
,这将加载组织。postgresql。驾驶舱。在该类中,可以有一个静态初始值设定项,该初始值设定项还可以加载/注册所需的所有其他类