OK, here the deal : I use JFormDesigner (a visual builder) , which generates an XML file, that "declares" the tree of visual objects (JLabel, JTable, and, in fact any kind of Beans (i.e. that can be instanciated with a "newInstance" )
I feel that it was smart to "inject" those beans into my controller class. There is a runtime code, that reads the xml file, do the instanciations , and provides a nice API based on the beans name. I've added an annotation @Widget for fields in my controllers , and I use the name of the annotated field to inject the corresponding bean instance. This is my "OwnInjector". It can't be replaced by guice, a simple facade would be: class OwnInjector { injectInto(Object o) ; } and I've made a simple type listener Now, as I've started using guice, and my controllers, my models are injected by guice. I've added a TypeListener so that whenever a controller is injected by guice, It is also by my OwnInjector. It works, cool. class JFormDesignerInjector<T> implements MembersInjector<T> { OwnInjector myOwnInjector = new MyOwnInjector(); public void injectMembers(T t) { if (provider != null) { LOG.info("injecting guice/jformdesigner: " + t.getClass()); myOwnInjector.injectInto(t); } } } But now, I want to go one step further, I want to replace Bean instanciation ( calling "newInstance" ) by guice instanciation in my OwnInjector. Have changed the code that says : return super.newComponentInstance(beanClass, compName); by the new one return guiceInjector.getInstance(beanClass); Therefore the idea was to simply have my "ownInjector" injected too, so it can get access to the instance "guiceInjector". But the problem is that I can't. And I feel stuck. I've been looking for a way to change my facade into : class OwnInjector { injectInto(Injector guiceInjector, Object o) ; } and my inject by : public void injectMembers(T t) { if (provider != null) { LOG.info("injecting guice/jformdesigner: " + t.getClass()); Injector guiceInjector = Guice.getInjectorFor( t ); myOwnInjector.injectInto(guiceInjector , t); } } but, I can't find a way to retrieve the injector neither. Thank for your help ! On Jan 25, 3:48 pm, Fred Faber <ffa...@gmail.com> wrote: > I'm a touch confused, but maybe that's irrelevant. > > If you're creating the target instances through guice, you can inject your > dependencies directly into them. I suspect you know this, and that there is > another reason you're using member injection. > > If these instances are not being created through guice, you can request > injection onto them using Binder::requestInjection() > (http://google-guice.googlecode.com/svn/trunk/javadoc/index.html?com/g... > ) > > If neither of these solutions work, could you please work backwards and > elaborate on the lifecycle of the target instances onto which you need to > inject dependencies? > > > > On Mon, Jan 25, 2010 at 9:13 AM, eric <eric...@gmail.com> wrote: > > Thank you for the answer, but it seems to me that your solution will > > not work as required... > > > I want to "inject" stuff into my classes, but I don't want to call an > > "injectoStuffInto(this)" for everyone and each class in my project, > > this is simply NOT injection. > > > My classes that needs such injection are already annotated with my own > > tag "@InjectMyStuff", therefore I already know I have to > > "injectStuff" in it, and it works already, using TypeListener. > > > But the injectfStuff function use "Class.newInstance" (the javabean > > standard) method to allocate "stuff". I just want to move to > > injector.getInstance() instead, but I can't get my hands on a decent > > injector while in the TypeListener (or anywhere else). > > > maybe with spi ? > > > On Jan 25, 1:58 pm, Fred Faber <ffa...@faiser.com> wrote: > > > inject Injector, not MyOwnInjector. > > > > On Jan 25, 2010 7:46 AM, "eric" <eric...@gmail.com> wrote: > > > > Hi, > > > > I've got a problem that I can't solve by myself with guice, a little > > > help would be nice, thanks. > > > > I've got a routine, that injects some "stuff" from a resource into a > > > given instance. Until now, the stuff that was injected was > > > instanciated using "newInstance". That was nice, but now I'm getting a > > > guice-addict, I would like to instanciate this "stuff" using > > > injector.getInstance(). > > > > 1/ solution could be : > > > > Use a TypeListener, > > > > public void injectMembers(T t) { > > > LOG.info("injecting guice/jformdesigner: " > > + > > > t.getClass()); > > > myOwnInjector.injectInto(t); > > > } > > > } > > > > but myOwnInjector should have been instantiated by guice, And I can't > > > make it !? > > > > 2/ a one liner in every class could go like this > > > > @Inject > > > MyClass(MyOwnInjector in){ > > > in.injectInto(this); > > > > } > > > > But, hey, that's a ugly dependency, isn't it ? > > > > Any ideas ? > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "google-guice" group. > > > To post to this group, send email to google-gu...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > google-guice+unsubscr...@googlegroups.com<google-guice%2bunsubscr...@google > > > groups.com> > > <google-guice%2bunsubscr...@google groups.com> > > > . > > > For more options, visit this group athttp:// > > groups.google.com/group/google-guice?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "google-guice" group. > > To post to this group, send email to google-gu...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-guice+unsubscr...@googlegroups.com<google-guice%2bunsubscr...@google > > groups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/google-guice?hl=en. -- You received this message because you are subscribed to the Google Groups "google-guice" group. To post to this group, send email to google-gu...@googlegroups.com. To unsubscribe from this group, send email to google-guice+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.