2011-12-21 2 views
2

Я только что прочитал главу о Constructor Bindings в Руководстве пользователя Guice, но на самом деле не понимаю, когда использовать привязки Constructor.Guice 3.0 - Цель привязки конструктора?

Насколько я понимаю, они обеспечивают ту же функциональность, что и методы @Provider, за исключением экземпляров, созданных с помощью атрибутов Constructor Bindings, участвующих в АОП. Это верно? Может ли кто-нибудь дать лучший пример, чем тот, который был в документе?

ответ

4

Насколько я понимаю, они обеспечивают ту же функциональность, что и методы @Provider, за исключением экземпляров, созданных с помощью конструкторских привязок, участвующих в АОП.

Это более или менее корректно, хотя есть некоторые преимущества, которые имеет связка конструктора. В принципе, это способ привязки к классу, как если бы он имел @Inject на конкретном конструкторе, даже если это не так, и вы не можете добавить аннотацию самостоятельно. В отличие от @Provides методов, вы можете написать утилиты, чтобы вы могли делать больше интересных вещей. Например, вы могли бы иметь метод utilitiy, который возвращает единственный конструктор класса, бросая исключение, если есть больше чем один:

bind(Foo.class).toConstructor(getOnlyConstructor(FooImpl.class)); 

Вы также мог бы использовать какую-то другую аннотацию (помимо @Inject), если вы хотите для по какой-то причине, и имеет метод утилиты, который получает конструктор, который аннотируется с привязкой.

+2

Он также рассматривает проблему бекона индейки Гиза: http://tinyurl.com/turkeybaconproblem –

Смежные вопросы