[cdi-dev] Getting injection point from Bean#create
Jozef Hartinger
jharting at redhat.com
Fri Nov 21 07:01:20 EST 2014
On 11/21/2014 11:17 AM, Romain Manni-Bucau wrote:
> Ok makes sense so it means failing in getBean(Foo.class) is fine
> right?
Correct, if Foo is not injected into an actual injection point but
instead BeanManager.getReference() is used instead, it is OK for Foo to
get null as the InjectionPoint
> Another issue is what if there is @inject InjectionPoint ip, in
> Foo? This should work (validated in TCKs)
Yes, same as above.
>
>
> Romain Manni-Bucau
> @rmannibucau
> http://www.tomitribe.com
> http://rmannibucau.wordpress.com
> https://github.com/rmannibucau
>
>
> 2014-11-21 10:31 GMT+01:00 Jozef Hartinger <jharting at redhat.com>:
>> We may not be on the same page here. Here is my understanding of Arjan's
>> setup:
>>
>> There is a custom Bean e.g. "FooBean implements Bean<Foo>" producing
>> instances of Foo. I assume the bean is @Dependent.
>>
>> Then, there is a Bar class e.g.
>> public class Bar {
>> @Inject Foo foo;
>> }
>>
>> If FooBean#create() calls "InjectionPoint ip =
>> getBean(InjectionPoint.class);" it means "I want to see an InjectionPoint
>> representing where I am being injected". In our case this would be
>> InjectionPoint representing Bar.foo field.
>>
>> This is no different from a producer method injecting InjectionPoint
>> directly.
>>
>>
>> On 11/21/2014 10:23 AM, Romain Manni-Bucau wrote:
>>> yes but what would mean any of the values? Not bound to any injection
>>> it doesn't mean anything
>>>
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau
>>> http://www.tomitribe.com
>>> http://rmannibucau.wordpress.com
>>> https://github.com/rmannibucau
>>>
>>>
>>> 2014-11-21 10:19 GMT+01:00 Jozef Hartinger <jharting at redhat.com>:
>>>> It means "give me an instance of type InjectionPoint and @Default
>>>> qualifier". In default setup this should be served by the built-in
>>>> Bean<InjectionPoint>".
>>>>
>>>>
>>>> On 11/21/2014 10:12 AM, Romain Manni-Bucau wrote:
>>>>> @Jozef: InjectionPoint ip = getBean(InjectionPoint.class); doesn't
>>>>> mean anything in the absolute. So why should it be allowed?
>>>>>
>>>>>
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau
>>>>> http://www.tomitribe.com
>>>>> http://rmannibucau.wordpress.com
>>>>> https://github.com/rmannibucau
>>>>>
>>>>>
>>>>> 2014-11-21 9:57 GMT+01:00 Jozef Hartinger <jharting at redhat.com>:
>>>>>> The workaround is very ugly. Instead of going that path OWB should be
>>>>>> fixed
>>>>>> to support the simple way.
>>>>>>
>>>>>>
>>>>>> On 11/20/2014 11:22 PM, arjan tijms wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> On Thu, Nov 20, 2014 at 11:07 PM, Romain Manni-Bucau
>>>>>>> <rmannibucau at gmail.com> wrote:
>>>>>>>> Not sure what it means actually. InjectionPoint is highly contextual
>>>>>>>> so
>>>>>>>> having an exception (not a npe of course) would make sense to me.
>>>>>>>>
>>>>>>>> Bean#create is a "you know what you do" from my understanding since
>>>>>>>> interceptors/decorators are not supported for instance so it shouldnt
>>>>>>>> rely
>>>>>>>> of things like that, no?
>>>>>>> Sure, no interceptor/decorators, but the injection point -is- there of
>>>>>>> course. I can see it being set in OWB as a special property on the
>>>>>>> creational context if I walk down the stack trace in a debugger when
>>>>>>> my Bean#create method is being called. An injection point is something
>>>>>>> that implementations of Bean could always need, for instance to
>>>>>>> retrieve the name of the field into which injection is taking place.
>>>>>>>
>>>>>>> Of course, it being a "you know what you do", it's okay that it's not
>>>>>>> as simple as having it injected into the Bean, and that some extra
>>>>>>> code is needed to obtain it. As long as there is at least -a- way to
>>>>>>> get hold of it.
>>>>>>>
>>>>>>> The method I posted in the openings post does in fact work, but it
>>>>>>> feels slightly hacky. If that's an acceptable way to get the injection
>>>>>>> point, then so be it. But just wondering if it's not something that
>>>>>>> works by chance and may break later.
>>>>>>>
>>>>>>> Kind regards,
>>>>>>> Arjan
>>>>>>> _______________________________________________
>>>>>>> cdi-dev mailing list
>>>>>>> cdi-dev at lists.jboss.org
>>>>>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>
>>>>>>> Note that for all code provided on this list, the provider licenses
>>>>>>> the
>>>>>>> code under the Apache License, Version 2
>>>>>>> (http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>>>>>>> provided on this list, the provider waives all patent and other
>>>>>>> intellectual
>>>>>>> property rights inherent in such information.
>>>>>>
More information about the cdi-dev
mailing list