因此,对于我的Java项目,我想动态加载所有模块而无需手动帮助。
根据我的包布局,这已经证明对我来说很难。 我不想将干净的包布局中的200~几个类全部移动到一个包中,以允许反射完美地加载它们。
我想创建一个动态类加载器,它将查看指定包中的所有包并获取所有类,转换它们并加载它们。
我的包布局是这样的:
我想遍历[com.package.module.modules]找到所有其他包,循环遍历它们,获取所有类并将它们转换为我的基础,然后加载它们。
我在这方面遇到了困难,最近我采取了一种非常混乱的方法。 (无取向)。
非常感谢任何帮助。
答案 0 :(得分:0)
正如评论中最初所述,这可能取决于您的用例的更多细节。 可以使用服务加载器来加载类或接口的已注册实现。
e.g。
Collection<YourInterface> collection = new ACollectionImplementation<>();
for (final YourInterface object: ServiceLoader.load(YourInterface.class)) {
collection.add(object);
}
注册应在META-INF / services中具有完全限定类名YourInterface
的文件中完成。使用完全限定名称在单独的行中列出每个实现。
以上将要求每个类都有一个默认的构造函数,供Service loader初始化。这通常用于创建工厂类,可以进一步扩展以构造其他对象。
Google“java ServiceLoader示例”,用于众多实例。