Для бинов @DependedSCoped вы можете использовать класс MyBean {
@Inject
private Instance<MYType> myTypeInst;
// This will ensure, that the bean is always fresh created.
// But the property value on the former instance will be lost
// So the changable value has to be provided another way to the created bean
public void do SomeThing(){
MyType bean = myTypeInst.get();
myTypeInst.destroy(bean);
}
}
Если вы используете бин @Depended scoped, то вы должны знать, что целевой объект инъекции получает свой экземпляр, который предназначен исключительно для этого бина,так кто меняет значение?Является ли область @Dependend правильной областью для вашего варианта использования?
Нет необходимости предоставлять собственный прокси или взломать существующий, просто найдите подходящую область для вашего варианта использования и правильно реализуйте компонент.Если URL-адрес соединения может измениться, то bean-компонент, управляющий соединением, должен знать об этом изменении и воссоздавать соединение, и бины, использующие этот bean-компонент, должны извлекать соединение каждый раз, когда его используют.
Возможно, вы могли бы дать описание вашего варианта использования, тогда мы, возможно, сможем дать вам лучший ответ.
Заключение
Поскольку сценарий использования стал понятен (см. Комментарии ниже), это привело к намерению реализовать настраиваемую область, поскольку CDI, по-видимому, не обеспечивает подходящую область для этого использования.дело.Я рекомендую попытаться найти предоставленную область CDI, если это возможно, и реализовать настраиваемую область только в случае необходимости, потому что вам нужно будет позаботиться о жизненном цикле ваших bean-компонентов, управлении вашей областью и о том, как bean-компоненты, управляемые вашей областью, могути будет использоваться приложением.Если не реализовано с осторожностью, пользовательская область может вызвать проблемы, такие как утечки памяти, если, например, ваши компоненты не будут правильно отброшены после использования.