Pieter,

Have you set up Spring's ContextLoaderListener (a Servlet listener that
initiates your Spring context) and registered the Spring
SpringComponentInjector as a Component instantiaition listener [1]?

Your idea to instigate injection in the super classes constructor is fine as
"this" will be the concrete subclass that you are instantiating - make sure
the right super constructor is called in all places you want injection to
take place, and also that you are not initialising the sub-classes injected
properties as that would take place after the super class is initialised
undoing what the super class constructor has done.

Finally, in a case like this, get the simplest possible scenario working
first (here, try injecting into the subclass directly) to show you have
everything set up correctly and then try the conceptually slightly more
complex solution of pushing-up the responsibility to instigate injection for
all your "models" into their common, abstract superclass.

Also, notice that this injector goes straight to your fields, even if
they're private, so your setters not being called alone does not mean
injection has not succeeded 

Does that make sense?

Regards - Cemal 
jWeekend 
OO & Java Technologies, Wicket Training and Development 
http://jWeekend.com
                
[1] http://cwiki.apache.org/WICKET/spring.html



pieter claassen-2 wrote:
> 
> My abstract basewebmodel constructor from which all my webmodels inherit
> marks inself for Spring injection but still no injection takes place. Any
> suggestions where I can look?
> 
> Can I run the injection in the constructor of an abstract model from which
> I
> inherit all my webmodels? I cannot see why not?
> 
> Thanks in advanced.
> P
> 
> 
> 
> BaseWebModel.java
> =================
> ...
>     public BaseWebModel(Long id) {
>         this.id = id;
>         InjectorHolder.getInjector().inject(this);
>     }
> 
> here is an example of my TemplateWebModel that uses @SpringBean to set
> TemplateFactory
> TemplateWebModel.java
> ===================
> 
> ...
>     @SpringBean(name="TemplateFactory")
>     private TemplateFactory templateFactory;
> 
> public TemplateWebModel(Template template) {
>         super(template);
>     }
> 
> 
> 
> P
> 
> On Fri, Sep 11, 2009 at 10:42 AM, jWeekend
> <jweekend_for...@cabouge.com>wrote:
> 
>>
>> Pieter,
>>
>> If you want to use Spring's @Configuarble you'll need to enable Load Time
>> Weaving or Complie Time Weaving.
>>
>> To use @SpringBean with an object that is not a Wicket Component you need
>> to
>> InjectorHolder.getInjector().inject(this) on initialisation of your
>> object.
>>
>> The benefit of the latter approach is that you do not need to introduce
>> weaving and that Wicket will make sure you have a serialisable proxy
>> injected.
>>
>> Regards - Cemal
>> jWeekend
>> OO & Java Technologies, Wicket Training and Development
>> http://jWeekend.com
>>
>>
>>
>>
>> Pieter Claassen wrote:
>> >
>> > I am using maven, spring 2.5.6, wicket 1.4 and am trying to inject my
>> > DAO's
>> > into my wicket models but I find that Spring just ignores my advice.
>> >
>> > My question:
>> > 1. @SpringBean only works on stuff that inherits from Component. What
>> do
>> I
>> > do with things like session and models that don't? I am trying to use
>> > @Configurable but that is being ignored.
>> > 2. My POM deps are below. What should I pull in to have @Configurable
>> > working?
>> > 3. BTW. When I comment the bean out of my XML config, then I do get an
>> > error
>> > so I am not sure if I am doing something very small wrong?
>> >
>> > Thanks.
>> > Pieter
>> >
>> > pom.xml
>> > =======
>> > ...
>> >        <dependency>
>> >             <groupId>org.springframework</groupId>
>> >             <artifactId>spring-core</artifactId>
>> >             <version>${spring.version}</version>
>> >         </dependency>
>> >
>> >         <dependency>
>> >             <groupId>org.apache.wicket</groupId>
>> >             <artifactId>wicket-spring</artifactId>
>> >             <version>${wicket.version}</version>
>> >       <!--Same results whether I include or exclude the next session-->
>> >       <exclusions>
>> >         <exclusion>
>> >           <groupId>org.springframework</groupId>
>> >           <artifactId>spring</artifactId>
>> >         </exclusion>
>> >       </exclusions>
>> >         </dependency>
>> > ....
>> >
>> >
>> > TemplateWebModel.java
>> > ==================
>> > .....
>> > @Configurable
>> > public class TemplateWebModel extends AbstractDataSetWebModel<Template>
>> {
>> >
>> >     private TemplateFactory templateFactory;
>> >
>> >     public TemplateFactory getTemplateFactory() {
>> >         return templateFactory;
>> >     }
>> >
>> >     public void setTemplateFactory(TemplateFactory templateFactory) {
>> >        throw new RuntimeException("REACHED TEMPLATE FACTORY SET");
>> //This
>> > setter is never run!!!!
>> >         //this.templateFactory = templateFactory;
>> >     }
>> > .....
>> >
>> > WicketApplicationDefinitition.xml
>> > ==========================
>> >
>> > <?xml version="1.0" encoding="UTF-8"?>
>> > <beans xmlns="http://www.springframework.org/schema/beans";
>> >        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> >           
>> xmlns:context="http://www.springframework.org/schema/context";
>> >        xsi:schemaLocation="
>> > http://www.springframework.org/schema/beans
>> > http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>> > http://www.springframework.org/schema/context
>> > http://www.springframework.org/schema/context/spring-context-2.5.xsd";>
>> >
>> >     <context:annotation-config/>
>> > <!--<aop:aspectj-autoproxy/>-->
>> >
>> > <!-- a bean that supplies my primary application database client -->
>> >     <bean id="appDataSource"
>> class="com.musmato.dao.ApplicationDBFactory"
>> >         destroy-method="close">
>> >         <constructor-arg>
>> >             <ref bean="appConfig" />
>> >         </constructor-arg>
>> >     </bean>
>> >
>> > <!-- a bean that supplies a network database client for template
>> uploads
>> > -->
>> >     <bean id="rootDataSource" class="com.musmato.dao.RootDBFactory"
>> > destroy-method="close">
>> >         <constructor-arg>
>> >             <ref bean="appConfig" />
>> >         </constructor-arg>
>> >     </bean>
>> > .....
>> >     <bean id="TemplateFactory" class="com.musmato.dao.TemplateFactory">
>> >         <property name="client" ref="appDataSource" />
>> >     </bean>
>> > ....
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Pieter Claassen
>> > musmato.com
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Spring-annotations-fail-to-inject-into-webmodels-tp25396625p25397205.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
>>
>>
> 
> 
> -- 
> Pieter Claassen
> musmato.com
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Spring-annotations-fail-to-inject-into-webmodels-tp25396625p25413472.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

Reply via email to