В bean-компоненте, способном к пассивации CDI, возможно ли, чтобы не-пассивирующие зависимости могли быть повторно введены, а не пассивированы?
В bean-компоненте, способном к пассивации CDI, возможно ли, чтобы не-пассивирующие зависимости могли быть повторно введены, а не пассивированы?
Рассмотрим этот код:
@SessionScoped
public class UserData implements Serializable {
@Inject
private Logger log;
private String data;
}
@ApplicationScoped
public class LoggerFactory {
@Produces
public Logger getLogger(){
...
}
}
public class Logger {
...
}
Так Logger
не Serializable
, но мне действительно все равно. когда UserData
десериализован, возможно ли иметь производителя для Logger
позвонил еще как-нибудь?
РЕДАКТИРОВАТЬ
Первоначальное обсуждение началось здесь:
http://www.cdi-spec.org/news/2015/07/03/CDI-2_0-EDR1-released/
Надеясь, что экспертная группа CDI придумает лучший способ, чем @Instance
1 ответ
Проверяя спецификации, у вас есть свой ответ. Logger
не сериализуемо, поэтому бин типа Logger
не способна к пассивации Контейнер не предоставляет трюк, который вы запрашиваете.
Решением было бы написать что-то вроде этого:
@SessionScoped
public class UserData implements Serializable {
@Inject
private Instance<Logger> logInstance;
private String data;
public Logger getLog() {
return logInstance.get();
}
}
Использование getLog()
вместо log
в вашем коде.