У меня есть ситуация, когда мне нужно использовать Guice 3.0 для создания экземпляра моего объекта, но одно из значений будет потенциально меняться с каждым экземпляром. Я не могу связать тип этого значения, и я не буду знать, пока мне не понадобится создать экземпляр.
Например:
public class Foo {
public Foo(Bar bar, Baz baz) {...}
}
Я хочу, чтобы Guice ввел параметр Bar
, но я не узнаю Baz
, пока мне не понадобится Foo
. Значение также не зависит от области действия (например, RequestScope).
Единственная причина, по которой я хочу, чтобы этот объект был полностью создан Guice, заключается в том, что мне нужен перехват методов. В Guice «созданные вручную экземпляры не участвуют в AOP».
Я пытался сделать это с Provider<Foo>
, но это позволяет мне public Foo get() { ... }
.
Конфигурационный кошмар был бы необходим для создания провайдера для каждого возможного значения Baz
, поэтому я не могу просто определить Baz
в конструкторе FooProvider.
Я чувствую, что мне здесь не хватает чего-то фундаментального. Возможно, это потому, что это последнее, что я делаю в пятницу. Любые идеи будут оценены.
Редактировать: Ответ ниже, чтобы использовать «вспомогательную инъекцию», кажется, работает только если у вас есть возможность редактировать источник Foo
. Foo
может на самом деле быть вне моего контроля в некоторых случаях. И если я сам создаю экземпляры (то есть реализую свою собственную фабрику), то перехватчики метода Guice-AOP, похоже, никогда не узнают об объекте.