用于自定义类初始化的轻量级类加载器?

问题描述:

我想注入一些数据到静态类字段,这是从大量的XML文件生成的。用于自定义类初始化的轻量级类加载器?

class Foo { 
    ... 
    static MetaData xxx; 
    static MetaData yyy; 
} 

注射是非常简单的,它发现Foo.properties并解析XXX,YYY属性,然后构造所述元数据的实例。

我不确定IoC容器是否可以帮助完成这项任务,但似乎没有。

因为Foo可能被未被IoC容器加载的类使用。

我的想法是,修改上下文类加载器以添加一些基于反射的特定类初始化代码。

有什么想法?

编辑有很多IoC容器,我想其中有些可能支持初始化扩展。

+1

`因为Foo可能被未被IoC容器加载的类使用。这可能没有问题,但IoC通常需要一些配置/注释,这可能是。你不能不修改ClassLoader,只需要找到所有的类或属性文件,调用Class.forName并做一些反射?实际上,如果可能的话,我宁愿通过创建一个Map >来避免它。 – maaartinus 2011-01-21 04:29:32

+0

不,摆脱Class.forName()是设计目的。不会有地图,解析/构建过程非常快,MetaData是一个内部的弱引用来减少内存占用量。 – 2011-01-21 04:36:51

xxx,yyy初始化为懒惰模式

如:

private static MetaData xxx=null; 
public static MetaData getXXX(){ 
    if(xxx=null){ 
     xxx=parse("Foo.properties"); 
    } 
    return xxx; 
} 

如果国际奥委会必须到您的程序,BeanPostProcessors在Spring可以是一个选择。您可以解析文件并在BeanPostProcessor中创建MetaData对象。