[webbeans-dev] Re: Bean.getInjectionPoints()

Scott Ferguson ferg at caucho.com
Thu Jan 1 22:37:50 EST 2009


On Dec 30, 2008, at 1:35 PM, Gavin King wrote:

> The spec requires that injection points be validated at init time for
> any Bean (for XxxxxDependencyException).
>
> Nick from the RI team has noticed that for this to be implementable,
> we need to add metadata about the injection points of a bean to the
> Bean interface.

It shouldn't be necessary, since "SimpleBean implements Bean" should  
be responsible for its own validation.  It doesn't make sense for the  
Manager implementation to validate the Bean, since that breaks the  
encapsulation model of both Manager and Bean.  It's cleaner for  
Manager to assume the Bean is valid.

On a related note, it would be cleaner if the Bean.create() method was  
changed to Bean.create(Context) in order to handle circular references.

The logic of Bean.create(Context) would be
   1. check if Bean is in Context (for circular ref), if so return the  
bean.
   2. instantiate the Bean (do not inject/initialize) and put it in  
Context (so we have a ref)
   3. inject/initialize the bean as usual (this may trigger the  
circular reference, which would be resolved by #1 on a second call).

-- Scott

>
>
> I propose:
>
> public abstract class Bean<X> {
>    ...
>    Set<InjectionPoint> getInjectionPoints();
> }
>
>
> Since we already have the following interface that describes  
> injection points:
>
> public interface InjectionPoint {
> 	public Type getType();
> 	public Set<Annotation> getBindingTypes();
> 	public Object getInstance();
> 	public Bean<?> getBean();
> 	public Member getMember();
> 	public <T extends Annotation> T getAnnotation(Class<T>  
> annotationType);
> 	public Annotation[] getAnnotations();
> 	public boolean isAnnotationPresent(Class<? extends Annotation>  
> annotationType);
> }
>
> I will make this change to the spec, unless anyone speaks up with  
> any objection.
>
>
> -- 
> Gavin King
> gavin.king at gmail.com
> http://in.relation.to/Bloggers/Gavin
> http://hibernate.org
> http://seamframework.org
>
>




More information about the weld-dev mailing list