Я хочу добавить некоторые данные в статические поля классов, которые генерируются из большого количества XML-файлов.Легкий класс-загрузчик для инициализации пользовательского класса?
class Foo {
...
static MetaData xxx;
static MetaData yyy;
}
Инъекция очень прост, он находит Foo.properties и анализировать свойства XXX, YYY, затем создает экземпляры метаданных.
Я не уверен, что контейнер IoC может помочь в выполнении этой задачи, но это похоже на нет.
Потому что Foo может использоваться классами, которые не загружаются контейнером IoC.
Моей идеей является изменение загрузчика класса контекста для добавления определенных кодов инициализации класса на основе отражения.
Любая идея?
EDIT Есть много контейнеров IoC, возможно, некоторые из них могут поддерживать расширения инициализации.
'Потому что Foo, возможно, используется классами, которые не загружаются контейнером IoC.' Это, вероятно, не проблема, но IoC обычно требует некоторой конфигурации/аннотаций, и это может быть. Не можете ли вы сделать это без изменения класса ClassLoader, просто найдя все классы или файлы свойств, вызывая Class.forName и делая некоторое отражение? На самом деле, я бы предпочел избежать этого, создав Map>, если это возможно. –
maaartinus
Нет, избавиться от Class.forName() является целью дизайна. Не будет карты, процесс синтаксического разбора/построения очень быстр, а MetaData является слабым ориентиром внутри, чтобы уменьшить объем памяти. –
Почему не может быть xxx, yyy, инициализированным в ленивом режиме? –