我刚刚学习java,遇到了一些问题。
这里我们有简单的工厂模式:
public class SomeFactory {
...
public static void registerProduct(String name, Class<? extends IProduct > f)
}
public SomeProduct implements IProduct {
static {
SomeFactory.register("some product", SomeProduct.class);
}
...
}
所有产品均应在工厂进行注册。
但在使用此代码之前,应加载所有 Products 类。
我可以把Class.forName()
某处,例如在 main 函数中。
但我想避免这种手动类加载。我只想添加新的IProduct
实现,无需更新其他部分(例如SomeFactory
or Main
方法等)。
但我想知道,是否可以自动加载一些类(例如用注释标记)?
P.S 我想注意的是,在运行时不会添加其他类,所有IProduct
在编译之前就知道实现。
UPD#1感谢您的回答!
但是是否可以使用以下命令自动生成属性文件IProduct
实例?
我的意思是是否可以制作一些生成属性文件或加载器代码的构建时脚本(例如,对于 Maven)?有这样的解决方案或框架吗?
UPD#2我完成了使用思考库 http://code.google.com/p/reflections/通过在启动时扫描类路径来提供运行时信息。
这是可能的,但并不容易。它需要扫描类路径中的所有类以查看它们是否具有注释或实现IProduct
界面。看Java中如何找到给定类的所有子类? https://stackoverflow.com/questions/492184/how-do-you-find-all-subclasses-of-a-given-class-in-java以获得此类问题的答案。
我会保持简单,只需要加载一个类列表,无论是在工厂本身还是在外部文件(例如属性文件)中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)