К сожалению, у меня нет ответа для вас, но я скажу это ...
Получение объектов для инъекции выглядит так, как будто это может работать - вам не обязательно использовать суперкласс:
public final class Foo {
@Inject
private BazService bazService;
private Baz baz;
@PostConstruct
public void init() {
InjectorFinder.getInjector().injectMembers(this);
baz = bazService.loadBaz();
}
public void setBazService(BazService bazService) {
this.bazService = bazService;
}
}
Я также не вижу причин сохранять ссылку на инжектор, поэтому рассмотрим служебный класс:
public class InjectorFinder {
public static Injector getInjector() {
FacesContext facesContext = FacesContext
.getCurrentInstance();
ExternalContext extContext = facesContext
.getExternalContext();
Map<String, Object> applicationMap = extContext
.getApplicationMap();
return (Injector) applicationMap.get(Injector.class
.getName());
}
}
Что-нибудь происходит с @PostConstruct и сериализацией? Это то, о чем я не особо задумывался, но это может повлиять на сессионные компоненты.
Это не похоже на звуковую технику. Если я правильно прочитал код, зависимости будут вставляться каждый раз, когда объект разрешается.
Я подозреваю, что этот патч страдает от проблем, которые я упомянул (другой распознаватель, тот же автор, в любом случае). Помимо ошибок, попытка использовать две разные реализации JSF (Sun и Apache) одновременно не сработает.
Я видел несколько проектов Guice / JSF в дикой природе ( guicesf ; jsf-sugar ; может быть, есть и другие?), Но я не пробовал их, поэтому у меня есть не знаю, помогут ли они вам или даже насколько они стабильны.
Что бы вы ни делали, возможно, стоит присмотреться к Web Beans (обзор здесь ), поскольку это может повлиять на будущие функции обработки bean-компонентов в JSF (если я правильно понять место Guice в стеке, вы можете использовать его для реализации Web Beans - я не рекомендую вам это делать).