Ссылка на это: http://docs.jboss.org/weld/reference/latest-master/en-US/html_single/#_the_literal_injectiontarget_literal_interface
Следуя инструкциям, приведенным выше, я могу динамически загружать SomeFrameworkComponent.class
во время выполнения с помощью некоторого пользовательского ClassLoader
.Это выглядит так:
public class CustomClassLoader extends ClassLoader {
public CustomClassLoader() {
}
public Class defineClass(String location, byte[] classData, String name) {
java.nio.file.Path p = java.nio.file.Paths.get(location);
try {
return defineClass(name, Files.readAllBytes(p), 0, classData.length);
} catch (ClassFormatError | IOException e) {
e.printStackTrace();
}
return null;
}
}
После этого я точно следую инструкциям, начиная с 16.5. The InjectionTarget interface
, и все это работает.Однако, если я изменю файл .class и перезагрузлю его, CDI будет возвращать старый каждый раз.Новый класс правильно перезагружен, потому что когда я вызываю newInstance()
для класса, возвращенного из defineClass
, это будет экземпляр обновленного класса, как и ожидалось.
Если я правильно понимаю, как только бин будет зарегистрирован, он помещается (связывается) в Context
, который является контейнером для бобов.Последующие запросы для этого компонента будут извлекать его из этого контейнера.И если я хочу иметь возможность уничтожить его по своему желанию или для каждого запроса получить новый файл из нового файла .class, мне нужно будет создать пользовательский Context
, который будет поддерживать это.Правильно?
Если мои предположения верны, то как программно указать мой пользовательский Context
, что объект .class должен идти?