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