It looks like you can bind an instance to type in
Guice. This is
done either
with Instance Bindings,
@Provides Methods or Provider Bindings, depending on the complexity
of the
class.
(
http://code.google.com/p/google-guice/wiki/Bindings)
All bindings are defined in a class that extends AbstractModule,
this would
be
XWSocialModule in my code (
https://svn.xwiki.org/svnroot/xwiki/sandbox/gsoc/opensocial/xwiki-social-op…)
.
These modules are then passed as arguments to
Guice.createInjector(), which
builds the injector.
In my application, the injector is build by
GuiceServletContextListener (
http://svn.apache.org/repos/asf/incubator/shindig/trunk/java/common/src/mai…)
This servlet takes the context parameters defined in my web.xml;
these are:
<context-param>
<param-name>guice-modules</param-name>
<param-value>
org.apache.shindig.common.PropertiesModule:
org.apache.shindig.gadgets.DefaultGuiceModule:
org.apache.shindig.gadgets.oauth.OAuthModule:
org.apache.shindig.common.cache.ehcache.EhCacheModule:
org.xwiki.opensocial.social.XWSocialModule
</param-value>
</context-param>
<listener>
<listener-
class>org.xwiki.container.servlet.XWikiServletContextListener</
listener-class>
</listener>
Now, all I need to do is bind the instance of PersonServiceXW after
it has
been initialized by XWiki's Component Manager.
The binding will be done in XWSocialModule, using one of the instance
binding methods (Instance Bindings,
@Provides Methods or Provider Bindings).
My questions are:
1. How do I make sure PersonServiceXW has been initialized already
by the
XWiki CM before binding it for Guice ?
List GuiceServletContextListener AFTER
XWikiServletContextListener in
web.xml. The servlet spec specifies that listeners are called in the
order they are encountered in web.xml, and XWikiServletContextListener
is the one that starts our component manager.