[cdi-dev] @PostConstruct and @Inject methods in superclasses

Marius Bogoevici mariusb at redhat.com
Mon Oct 3 10:48:16 EDT 2011


On Sat, 2011-10-01 at 23:21 +1000, Stuart Douglas wrote:
> 
> 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).

That's not correct. In Weld you should be able to have @AroundInvoke
methods on the beans themselves alright, unless that was explicitly
disabled since 1.1. If that doesn't work, it's definitely a bug.

> - @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 at gmail.com>
> > wrote:
> > 
> > > From: Stuart Douglas <stuart.w.douglas at gmail.com>
> > > Subject: Re: [cdi-dev] @PostConstruct and @Inject methods in
> > > superclasses
> > > To: "Mark Struberg" <struberg at yahoo.de>
> > > Cc: "cdi-dev" <cdi-dev at 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 at lists.jboss.org
> > > > https://lists.jboss.org/mailman/listinfo/cdi-dev
> > > 
> > > 
> 
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev




More information about the cdi-dev mailing list