Поскольку другие уже ответили, вы можете просто использовать @Inject Injector
, потому что Guice определяет само связывание.
Обычно вам требуется только один Injector
в вашем приложении, а статическая переменная является еще более простым способом хранения и доступа к синглтону, чем его внедрение. В нашем веб-приложении мы используем stripes-guicer и получаем Injector
от статического метода GuiceInjectorFactory.getInjector()
, когда он нам нужен (например, в нашем перехватчике Hibernate).
Я немного сбит с толку советом, что "вы не должны использовать Инжектор напрямую". Как еще я могу получить экземпляр за исключением вызова injector.getInstance()
или injector.injectMembers()
? Выхода нет. Да, вы можете определить методы Провайдера, но они никогда не будут вызываться, если где-то что-то использует Инжектор. Да, есть модули, которые используют для вас Injector
, например ServletModule ; Вы должны создать Injector
самостоятельно, но после этого можете оставить его на ServletModule
.
Так что в некоторых обстоятельствах вы можете избежать непосредственного использования Injector
, но это не значит, что вы не должны его использовать. Если вы используете только Guice без каких-либо дополнительных модулей, то вам «следует» использовать Injector
повсюду, потому что нет другого способа вызвать инъекцию. (Я думаю, разработчики, которые проводят весь день за написанием кода внутри фреймворков, иногда забывают, что некоторые люди на самом деле создают свои собственные объекты.)