Hi Gurkan!
> the immediate children of the XML bean declaration
I also understood it this way when I first read the spec.
from the spec:
> For a simple bean defined using XML, the bean constructor may be
> specified by listing the parameter types of the constructer, in
> order, as direct children of the element that declares the bean.
But on the other hand it was not really clear to me if the examples given in
the spec are _with_ or _without_ the bean declaration itself (outer
<myapp:TstBeanConstructor> in my example)!
If we interpret it your way, then no 'mixed' scenario like the following would
work:
I like to have a @Named(value="config") @SessionScoped TstBeanConstructor PLUS
I like to inject the value 7 in setI2.
How can this be achieved if there is no separation between the constructor
parameters and the additionally injected ones?
Maybe this is not needed? Or it's a shortcoming of the spec? Or I'm completely
confused? :)
How I would write the XML (assuming a ct public TstBeanConstructor(int ctParam)
{ ... ):
<myapp:TstBeanConstructor>
<Named>config</Named>
<SessionScoped/>
<myapp:TstBeanConstructor>
<myapp:ctParam>42</myapp:ctParam>
</myapp:TstBeanConstructor>
<myapp:i2>7</myapp:i1>
</myapp:TstBeanConstructor>
LieGrue,
strub
--- Gurkan Erdogdu <[email protected]> schrieb am Mi, 14.1.2009:
> Von: Gurkan Erdogdu <[email protected]>
> Betreff: Re: XML definition for constructor injection
> An: [email protected]
> Datum: Mittwoch, 14. Januar 2009, 8:14
> Hi Mark;
>
> Your XML definition is not correct, I think. Specification
> says that, the immediate children of the XML bean
> declaration which correspond to *Java Type* is captured as
> a *parameters* of this constructor. So the correct XML
> definition may be written as;
>
> <myapp:TstBeanConstructor>
> <RequestScoped/>
> <lang: Integer/>
> </myapp:TstBeanConstructor>
>
> where *lang* is the namespace that corresponds to the
> *java.lang* package. You are able to give any namespace
> instead of *lang*.
>
> When the container creates this bean instance, it will
> inject the constructor parameter with looking the beans with
> API type *Integer* and Binding Type *...@current*. If it finds
> the bean successfully, it injects its current instance.
>
> For example, lets say that we define producer method in
> other bean class (MyOtherBean) .
>
> class MyOtherBean
> {
>
> @RequestScoped @Produces
> public int getTstBeanConstructorInitialValue()
> {
> return 12;
> }
> }
> Then, container calls this method via its parent bean
> instance (MyOtherBean) and injects the resulted instance
> (Integer:12) into the TstBeanConstructor.
>
> I did not try to execute this sample, but I think it works.
>
> Please look at the specification that contains full
> explanation of the XML defined constructor declaration.
>
> /Gurkan
>
>
>
>
> ________________________________
> From: Mark Struberg <[email protected]>
> To: [email protected]
> Sent: Tuesday, January 13, 2009 10:51:43 PM
> Subject: XML definition for constructor injection
>
> grr, my first mail got eaten by the spam daemon
>
>
> --- Mark Struberg <[email protected]> schrieb am Di,
> 13.1.2009:
>
> > Von: Mark Struberg <[email protected]>
> > Betreff:
> > An: [email protected]
> > Datum: Dienstag, 13. Januar 2009, 21:46
> > Hi!
> >
> > I like to test the constructor injection via XML
> > definition.
> >
> > For what I understand after reading the spec, the
> following
> > should work:
> >
> > Assume we have the WebBean, _without_ any annotations:
> >
> > public class TstBeanConstructor
> > {
> >
> > private int i1=0;
> > private int i2=0;
> >
> > public TstBeanConstructor(int i1)
> > {
> > this.i1 = i1*100;
> > }
> >
> > public int getI1()
> > ...
> >
> >
> > and the XML looks like:
> >
> > <myapp:TstBeanConstructor>
> > <RequestScoped/>
> > <myapp:TstBeanConstructor>
> > <myapp:i1>12</myapp:i1>
>
> >
> > </myapp:TstBeanConstructor>
> > </myapp:TstBeanConstructor>
> >
> >
> > should this work? At first I was a bit confused about
> the 2
> > <myapp:TstBeanConstructor>, is this correct in
> the
> > XML?
> >
> > txs and LieGrue,
> > strub