The issue with @DependsOn for CDI is that specifying a CDI dependency using an annotation is extremely ugly. Say I have a CDI bean:
@Colored @Red
class Parrot {
}
If I wanted to depend on that using @DependsOn:
@DependsOn(type=Parrot.class, qualifiers={Colored.class, Red.class})
it's pretty nasty. We're not going to win anyone to Java EE with this.
However it get's worse.
@British @Gender(MALE)
class Person {
}
@DependsOn(type=Person.class, qualifiers={_at_DependentQualifier(British.class), @DependentQualifier(value=Gender.class, attributes={_at_DependentQualifierAttribute(name="value", value="MALE")}))
This is now basically useless, and I've yet to hear anyone say that this is a good approach.
I know that some people have proposed requiring this only works with @Named e.g.
@British @Gender(MALE)
@Named("britishMalePerson")
class Person {
}
@DependsOn("britishMalePerson")
However this cannot be included in the CDI spec as it is a complete deviation from the guiding principles of CDI.
I've yet to see a better approach - any ideas? :-D
Pete
On 12 Sep 2011, at 04:13, Antonio Goncalves wrote:
> Wouldn't it also make sense to have @DependsOn on some CDI beans (@ApplicationScoped for example) ?
>
>
> On Sat, Sep 10, 2011 at 06:25, Reza Rahman <reza_rahman_at_lycos.com> wrote:
> Adam,
>
> I hate to say this, but I'd rather focus on moving @DependsOn to CDI where name-based qualifiers would be unlikely to be used anyway.
>
> Cheers,
> Reza
>
>
>
> On 9/9/2011 7:23 PM, Marina Vatkina wrote:
> Adam,
>
> What would be the use-case for the new element?
>
> thanks,
> -marina
>
> Adam Bien wrote:
> Hi All,
>
> currently the @DependsOn annotation looks like:
> @Target(value = {ElementType.TYPE})
> @Retention(value = RetentionPolicy.RUNTIME)
> public @interface DependsOn {
>
> public String[] value();
> }
>
>
> I would like to extend it with a class element:
>
> @Target(value = {ElementType.TYPE})
> @Retention(value = RetentionPolicy.RUNTIME)
> public @interface DependsOn {
>
> public String[] value();
> *public Class[] classes() default void.class;*
> }
>
> It should be possible to specify the dependencies as simple EJB-names as well as referring directly to the classes,
>
> any thoughts?
>
> adam
>
>
>
>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 10.0.1392 / Virus Database: 1520/3886 - Release Date: 09/09/11
>
>
>
>
>
>
> --
> Antonio Goncalves
> Software architect and Java Champion
>
> Web site | Twitter | Blog | LinkedIn | Paris JUG