[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [cdi-dev] Minimal CDI implementation questions | 
Hi,
I'm hoping I could ask a few questions about some of the CDI interfaces.
I'm adapting an injection framework I've been developing on and off for 
the past years to be compatible with a minimal subset of CDI: The 
"Instance" type and the types it refers to (Handle, Bean, 
InjectionPoint, BeanAttributes).  The framework is tailored to my 
personal needs, but is quite extensive, supporting scopes, producers, 
assisted injection, optional injection, providers, lists and sets. It 
allows for custom annotation strategies and extensions, and I'm seeing 
if it can support CDI style injection simply by configuring it 
differently. When implementing `Instance` however I noticed quite some 
internal structures are exposed (`Handle` exposes `Bean` which then 
exposes a whole host of other classes and interfaces).
I have a few questions regarding those interfaces:
1) How does an InjectionPoint handle an implicit dependency on an owner 
class (container class)? For example, when you have a non-static 
Producer method, it can only be called after its owner class is 
instantiated. The Producer's parameters are injection points, but my 
framework also lists the owner class as an injection point, representing 
the "this" parameter that is implicitely needed for calling a non-static 
Producer method. For such an injection point, my implementation returns 
`null` for `getMember()` to indicate the injection point represents the 
owner class. How is this handled in CDI?
2) The BeanAttributes class has a `getQualifiers` method.  Does this 
include qualifiers detected in any stereotypes it might be annotated 
with? What's the reasoning behind listing stereotypes separately? 
Similar question for `getScope` although I'm assuming there that it must 
be getting the scope from the stereotype (if present and not overriden).
3) Is `BeanAttributes#getScope` allowed to return `null`? In CDI Beans 
always have a scope, even if it is just `Dependent` AFAIK. My own 
implementation does not return the annotation, but instead immediately 
returns the appropriate `ScopeResolver` which is never `null` even for 
unscoped beans -- when not annotated, the annotation would be `null` though.
4) `BeanAttributes#getName` seems to allude you can return `null` here 
if it has no name, or is it supposed to return an empty string in that case?
Best regards,
John Hendrikx