On 01/10/2011, at 7:47 PM, Mark Struberg wrote:
Oki found it there:
> most general superclass first.
of course the interceptors_spec_1_1 only defines this for 'Lifycycle
interceptors'
The spec is not very clear on this point, but @PostConstruct methods on a bean are
considered lifecycle interceptors. There is actually a fair bit of deviation between CDI
and the interceptors and Managed bean spec on some points:
- CDI beans don't support interceptor methods on the beans themselves (at least Weld
does not, the interceptors spec allows you to have an @AroundInvoke method on the managed
bean itself).
- @Resource @Psersitence* @EJB etc annotation of CDI managed beans do not create JNDI
bindings like they are supposed to according to the EE platform spec.
As far as I know no one actually really uses these 'features' anyway, but it is a
deviation from the spec that we should probably clarify.
Stuart
But what about my example 4, the shared @Inject method + @PostConstruct case?
Do we need to invoke all superclass injection first? thus do all @Inject fields + @Inject
methods + @PostConstruct first, then the one from the Horse class?
Could we also specify that all @Inject methods needs to get called before
@PostConstruct?
txs and LieGrue,
strub
--- On Fri, 9/30/11, Stuart Douglas <stuart.w.douglas(a)gmail.com> wrote:
> From: Stuart Douglas <stuart.w.douglas(a)gmail.com>
> Subject: Re: [cdi-dev] @PostConstruct and @Inject methods in superclasses
> To: "Mark Struberg" <struberg(a)yahoo.de>
> Cc: "cdi-dev" <cdi-dev(a)lists.jboss.org>
> Date: Friday, September 30, 2011, 9:58 PM
>
> This is actually covered by the interceptors specification,
> from memory I am pretty sure the base class method is mean't
> to be called first, but the spec gives you the full order.
>
> @Inject methods are called before @PostConstuct (the are
> called in InjectionTarget.inject, which gets called before
> InjectionTarget.postConstruct).
>
> I don't think we specify an order for @Inject methods.
>
> Stuart
>
> On 01/10/2011, at 5:47 AM, Mark Struberg wrote:
>
>> Hi!
>>
>> JSR-250 common annotations is pretty thin about having
> @PostConstruct in multiple class hierarchies. It just says
> that there must only be one single method annotated with
> @PostConstruct in a class. Thus my question:
>>
>> If I have
>>
>>
>> public class Animal {
>> @PostConstruct
>>
>> public void doInit() {..}
>> ..
>>
>> }
>>
>> and
>>
>> public class Horse extends Animal {
>> @PostConstruct
>>
>> public void doSomeOtherInit() {..}
>> ..
>>
>> }
>>
>>
>> 1.) for a contextual instance of Horse, will
> Animal#doInit() get executed or only the one from the
> 'effective' class?
>> 2.) if 1.) was yes, then In which order do they get
> executed? Is this specced somewhere?
>>
>> 3.) Same scenario with @Inject methods. Do we specify
> an order?
>>
>> 4.) Both classes have @Inject methods and
> @PostConstruct. Again: which order of invocaition?
>>
>>
>> Just that you understand my intention: we had a
> @PostConstruct method in Horse which did set a 'cached' flag
> in Animal. Turned out that this was a random generator
> depending on the intsalled server ;)
>>
>>
>> LieGrue,
>> strub
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>
>