Thanks for your insight, Patrick.

But I'm stuck in my dumbness: "setting the component's fields" -- does this
mean a new instance of that particular annotated bean is created, or that
singleton is accessed somehow (proxy)?
Also, it's not the injected beans that are null, it's their dependencies,
and I assume that is because new instances of those beans are created.


On Wed, Feb 18, 2009 at 9:13 AM, Patrick Angeles <patr...@inertiabev.com>wrote:

>
>
> To answer your question, yes spring beans are singleton by default. The
> @SpringBean annotation works roughly like this: in your Application class,
> you set a ComponentInstantiationListener which gets called every time a
> Wicket page/component is instantiated. The particular listener that gets
> set
> (SpringComponentInjector) takes care of setting the component's fields that
> are annotated with @SpringBean with the appropriate beans found in the
> spring context.
>
> My guess is that the Listener isn't being configured properly, and that is
> why your @SpringBeans are null...
>
>
>
> Sergey Podatelev wrote:
> >
> > Okay, this question might actually be more related to Spring, but I'm
> > completely lost here, and my question on Spring forums usually don't get
> > any
> > replies, so I hope Wicket community might help as it usually does.
> >
> > I'm using JCR, and have a RepositoryDao bean configured in
> > applicationContext.xml.
> > RepositoryDao has a "template" property which points to an instance of
> > JcrTemplate in applicationContext.xml, all repository access is performed
> > through that template.
> >
> > I have an AccessPage which has a RepositoryDao injected via @SpringBean.
> > There is an inner class Form on that page, it has a default submit button
> > and three submit buttons that skip default processing and perform their
> > own
> > operations onSubmit(). Both default button and skip-default-processing
> > buttons use the same repositoryDao property of AccessPage to perform
> > certain
> > operations on repository.
> >
> > I noticed that when I actually open that AccessPage, there's a new
> > RepositoryDao object created, and it's "template" property is null. When
> I
> > press any of those non-default submit buttons of the form, everything
> > works
> > fine. But on default button onSubmit(), I see that there's yet another
> > insance of RepositoryDao created, and it's "template" is also null, which
> > leads to NullPointerException.
> >
> > I assumed that beans configured in applicationContext.xml are actually
> > singletons, so there won't be any new instances of such nodes upon
> > pages-with-injections instantiation.
> >
> > Regardless of whether that assumption is correct/incorrect/my-god-rtfm, I
> > still won't understand why default submit button reaction is NPE as it
> > uses
> > same partnershipDao property of AccessPage.
> >
> > Could someone please elaborate some internal differences of the
> > annotation-based approach as opposed to storing DAOs in Application
> > object.
> > In the latter case it's quite clear that there's a single instance of
> > RepositoryDao as a property of MyApplication which is pulled on
> > ((MyApplication) Application.get()).getRepositoryDao().
> >
> > Thanks.
> >
> > --
> > sp
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/%40SpringBean-vs-getApplication%28%29.getDao%28%29-tp22061472p22072806.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
sp

Reply via email to