Java自动从主包中的多个包加载类

时间:2014-02-14 16:53:54

标签: java reflection tree

因此,对于我的Java项目,我想动态加载所有模块而无需手动帮助。

根据我的包布局,这已经证明对我来说很难。 我不想将干净的包布局中的200~几个类全部移动到一个包中,以允许反射完美地加载它们。

我想创建一个动态类加载器,它将查看指定包中的所有包并获取所有类,转换它们并加载它们。

我的包布局是这样的:

http://puu.sh/6VVih.png

我想遍历[com.package.module.modules]找到所有其他包,循环遍历它们,获取所有类并将它们转换为我的基础,然后加载它们。

我在这方面遇到了困难,最近我采取了一种非常混乱的方法。 (无取向)。

非常感谢任何帮助。

1 个答案:

答案 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示例”,用于众多实例。