Skip to main content
1 of 4

Ok, those are many questions you have and I guess some of the points can be approached in more than one way.

Creating the injector is not cheap. Guice will do some analysis to detect errors as well as create all singletons. So you should create the injector at startup.

I usually have a single injector for my application.

Reagarding your question 1.: Yes the injector can be injected. But I see it as a bad practice. Reason fot this is that calls to injector.getInstance() and injector.injectMembers() make it hard to reason about the dependencies of a class.

  • if you need to create more than one instance or you need to controll the time when an instance is created inject a Provider instead of X.
  • if the object you want to create needs both runtime parameters and dependencies use asissted inject.

In this sense the injector is implicitly available to any instance created by guice this includes the API user.

And finally AOP. Aspects are a powerfull feature but also can hide some of the business logic I suggest to use them only for very repetitive tasks which all developers know well. Also take into account that aspects only work on -instances created by guice

  • non private, non static, non private methods And guice wont inform you if you add an annotation to either of the above. Your aspect will silently be ignored