用于自定义类初始化的轻量级类加载器?
问题描述:
我想注入一些数据到静态类字段,这是从大量的XML文件生成的。用于自定义类初始化的轻量级类加载器?
class Foo {
...
static MetaData xxx;
static MetaData yyy;
}
注射是非常简单的,它发现Foo.properties并解析XXX,YYY属性,然后构造所述元数据的实例。
我不确定IoC容器是否可以帮助完成这项任务,但似乎没有。
因为Foo可能被未被IoC容器加载的类使用。
我的想法是,修改上下文类加载器以添加一些基于反射的特定类初始化代码。
有什么想法?
编辑有很多IoC容器,我想其中有些可能支持初始化扩展。
答
xxx,yyy初始化为懒惰模式。
如:
private static MetaData xxx=null;
public static MetaData getXXX(){
if(xxx=null){
xxx=parse("Foo.properties");
}
return xxx;
}
如果国际奥委会必须到您的程序,BeanPostProcessors在Spring可以是一个选择。您可以解析文件并在BeanPostProcessor中创建MetaData对象。
`因为Foo可能被未被IoC容器加载的类使用。这可能没有问题,但IoC通常需要一些配置/注释,这可能是。你不能不修改ClassLoader,只需要找到所有的类或属性文件,调用Class.forName并做一些反射?实际上,如果可能的话,我宁愿通过创建一个Map>来避免它。 –
maaartinus
2011-01-21 04:29:32
不,摆脱Class.forName()是设计目的。不会有地图,解析/构建过程非常快,MetaData是一个内部的弱引用来减少内存占用量。 –
2011-01-21 04:36:51