Я хочу использовать Guice в приложении Vaadin (но это не должно зависеть от Vaadin).
В моем Vaadin MyApp (расширяющий класс приложения) я могу использовать аннотацию @Inject для внедрения реализаций, определенных в модуле в моем Custom ContextListener, расширяющем GuiceServletContextListener, где создается Injector.
Теперь я хочу получить доступ к Реализациям из любого места в моем приложении, но я всегда получаю NullPointerExceptions.
Я подумал, что достаточно создать объект Top (который будет классом приложения в mycase (?)) С хитростью, чтобы каждый объект, созданный из этого класса (в данном случае с новым), мог внедрить.
Если я создам каждый объект с помощью Injector.getInstance (..), он будет работать, но при таком подходе мне придется создавать каждый «промежуточный» класс, который даже не использует @Inject с этим методом.
Возможно ли то, что я надеюсь сделать, даже с помощью хитрости, или я что-то упустил? Моя основная цель - получить доступ к реализации DAOFactory (необходимо определить сессию) из любого места в моем проекте, не передавая его каждому конструктору.
Спасибо, iamgalaxys
Код, который я использую:
ApplicationServlet:
@Singleton
public class GuiceApplicationServlet extends AbstractApplicationServlet {
private static final long serialVersionUID = -5729153715228068816L;
// Guice stuff
protected final Provider<Application> applicationProvider;
@Inject
public GuiceApplicationServlet(Provider<Application> applicationProvider) {
this.applicationProvider = applicationProvider;
}
@Override
protected Class getApplicationClass() throws ClassNotFoundException {
return Application.class;
}
@Override
protected Application getNewApplication(HttpServletRequest request) throws ServletException {
return applicationProvider.get();
}
ContextListener:
public class MyContextListener extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
ServletModule module = new ServletModule() {
@Override
protected void configureServlets() {
...
serve("/*").with(GuiceApplicationServlet.class, params);
}
И я определил Guice Filter и ContextListener в web.xml