Самое простое решение, если вы используете инжектор конструктора и не делаете ничего сумасшедшего, - это создать метод пост-построения и аннотировать его с помощью @Inject
:
final class FooImpl implements Foo {
private final Bar bar;
@Inject
FooImpl(Bar bar) {
this.bar = bar;
...
}
@Inject
void init() {
// Post-construction code goes here!
}
}
Когда Guice предоставляет FooImpl, он увидит, что у него есть конструктор @Inject
, вызывает его, а затем ищет методы, помеченные @Inject
, и вызывает их. Предполагаемый вариант использования для этого - инъекция сеттера, но даже если у метода @Inject
нет параметров, Guice вызовет его.
Я не рекомендую использовать это, если вы используете setter или field инъекцию для ввода deps, поскольку я не знаю, дает ли Guice какие-либо гарантии порядка, в котором вызываются методы @Inject
(то есть ваш 1011 * метод не может быть гарантированно вызван последним). Тем не менее, инъекция в конструктор является предпочтительным подходом в любом случае, так что это не должно быть проблемой.