Насколько я понимаю, они обеспечивают ту же функциональность, что и методы @Provider, за исключением экземпляров, созданных с помощью конструкторских привязок, участвующих в АОП.
Это более или менее корректно, хотя есть некоторые преимущества, которые имеет связка конструктора. В принципе, это способ привязки к классу, как если бы он имел @Inject
на конкретном конструкторе, даже если это не так, и вы не можете добавить аннотацию самостоятельно. В отличие от @Provides
методов, вы можете написать утилиты, чтобы вы могли делать больше интересных вещей. Например, вы могли бы иметь метод utilitiy, который возвращает единственный конструктор класса, бросая исключение, если есть больше чем один:
bind(Foo.class).toConstructor(getOnlyConstructor(FooImpl.class));
Вы также мог бы использовать какую-то другую аннотацию (помимо @Inject
), если вы хотите для по какой-то причине, и имеет метод утилиты, который получает конструктор, который аннотируется с привязкой.
Он также рассматривает проблему бекона индейки Гиза: http://tinyurl.com/turkeybaconproblem –