我只是在学习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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
所有产品都应在工厂注册.
但在使用此代码之前,应加载所有Products类.我可以放在Class.forName()某个地方,例如在main函数中.但我想避免这种手动类加载.我想添加新的IProduct
实现,而不更新其他部分(例如SomeFactory或Main方法等).但我想知道,是否有可能自动加载一些类(例如标有注释)?
PS我想注意,在运行时不会添加其他类,所有IProduct实现在编译之前都是已知的.
UPD#1
感谢您的回答!但是有可能使用IProduct实例生成自动生成的属性文件吗?我的意思是有可能制作一些生成属性文件或加载器代码的构建时脚本(例如maven)吗?有这样的解决方案或框架吗?
UPD#2 我完成了使用Reflections库,它通过在启动时扫描类路径来提供运行时信息.
这是可能的,但不容易.它需要扫描类路径中的所有类,以查看它们是否具有注释或实现IProduct接口.请参阅如何在Java中找到给定类的所有子类?为了解决这个问题.
我会保持简单,只需要在工厂本身或外部文件(例如属性文件)中加载要加载的类列表.
| 归档时间: |
|
| 查看次数: |
6133 次 |
| 最近记录: |