[cdi-dev] @PostConstruct on inherited class
Pete Muir
pmuir at redhat.com
Mon Oct 15 10:15:47 EDT 2012
+1, Y.init() should be the only one called, and once only.
On 12 Oct 2012, at 15:19, JJ Snyder wrote:
> Martin,
> I'm using GlassFish and I tested it with Weld 1.1.4.Final and
> 1.1.9.Final and both give the same results.
>
> I'll create some variations of the method hierarchy and see what I get.
>
> Maybe my test app is laid out incorrectly...Can you send me the test app
> that you used where it works and I'll run it in my env?
>
> JJ
>
> On 10/12/2012 10:05 AM, Martin Kouba wrote:
>> Hi JJ,
>>
>> I believe Y.init() should be invoked and only once. It works for me on
>> AS7 and Weld 1.1.5. What container do you use?
>>
>> See also Interceptors 1.1 spec, chapter "Multiple Callback Interceptor
>> Methods for a Life Cycle Callback Event":
>> "If a lifecycle callback interceptor method is overridden by another
>> method (regardless of whether that method is itself a lifecycle
>> callback interceptor method (of the same or different type)), it will
>> not be invoked."
>>
>> By the way if X.init() wasn't overriden, it would be invoked first
>> (see the same chapter in spec).
>>
>> Martin
>>
>> Dne 11.10.2012 22:53, JJ Snyder napsal(a):
>>> I'm investigating an issue dealing with @PostConstruct...
>>> Suppose I have the following 2 classes:
>>>
>>> public class X {
>>> @PostConstruct
>>> public void init() {
>>> }
>>> }
>>>
>>> public class Y extends X {
>>> @PostConstruct
>>> public void init() {
>>> }
>>> }
>>>
>>> and then in some other class I inject Y:
>>> public class Other {
>>> @Inject Y y;
>>>
>>> public void foo() {
>>> y.doSomething();
>>> }
>>>
>>> According to the specs it's legal to have @PostConstruct defined on both
>>> X and Y. Also because Y defines init() it does not inherit X's init()
>>> method (section 4.2). So when an instance of Y is created which init()
>>> methods should be called for the @PostConstruct? What I am observing is
>>> that Y's init() method is called twice. Is this correct? I can't find
>>> any examples or any documentation that talks about this specific case.
>>>
>>> thanks,
>>> JJ
>>> _______________________________________________
>>> 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