JSR-330 knows the @Qualifier meta annotation. (@Named is a @Qualifier itself)
Thus it would be perfectly possible to create a @Role Qualifier:
@Qualifier
public @interface @Role {
value();
hint() default "";
}
Note: the role is usually the Interface, thus we do not need it in most cases
as JSR-330/299 are typesafe anyway. Only if we inject into Object.class or a
shared common interface.
and write something like:
@Inject @Role(hint="git")
private ScmProvider gitScm;
LieGrue,
strub
----- Original Message -----
> From: John Casey <[email protected]>
> To: Maven Developers List <[email protected]>
> Cc:
> Sent: Monday, May 21, 2012 10:30 PM
> Subject: Re: Maven Plugins annotations support @Component role attribute to
> Class<?>
>
> On 5/21/12 7:03 AM, Olivier Lamy wrote:
>> 2012/5/21 Brett Porter<[email protected]>:
>>>
>>> On 21/05/2012, at 3:45 AM, Hervé BOUTEMY wrote:
>>>
>>>> here, the end-user is a plugin developer, then someone who should
> be able to
>>>> create a (Plexus) component when necessary
>>>>
>>>> Yes, I liked @Component too but as soon as you write a component
> and inject
>>>> somponents inside it, you discover the discrepency: the more I work
> on this,
>>>> the more I discover these little discrepencies that lost me for a
> long time.
>>>> Notice that the target is JSR330 @Inject.
>>>> Is it too early to use @Inject?
>>>
>>> Agree - I didn't think @component (the Javadoc annotation) would
> carry over to the plugin annotation. It should just use @Inject if that's
> feasible.
>> Yup possible
>> @Inject
>> @Named( value = "maven" )
>> protected ArtifactMetadataSource artifactMetadataSource;
>
> What do we do about:
>
> protected Map<Wagon> wagons;
>
> In the old setup, IIRC we used something like:
>
> @component role=org.apache.maven.wagon.Wagon ...
>
> If we were to use a CDI approach, we'd need a provider to compose the
> Map instance, right? That, or we'd need to use Instance<Wagon>, unless
>
> I'm just too much of a newbie to know better...
>
> In any case, what about the other collection-oriented attributes of
> @component? Don't we have a hints= attribute, or am I confusing all of
> this with the Plexus @Requirement stuff?
>
>>
>> But not possible anymore for
>> @Component( role = ArtifactMetadataSource.class, roleHint =
> "maven" )
>> protected Object artifactMetadataSource;
>>
>> but not sure it's a real problem for this "feature" :-)
>>
>> But again we use annotations here only for plugin metadata generation
>> and not at runtime.
>>
>> Maybe in the future we could handle @Inject at runtime level.
>>
>> But IMHO classpath scanning at runtime to find various annotations
>> will have a huge performance impact whereas simply reading the xml
>> plugin descriptor is fast.
>> And that's what we need with a tool such Maven fast startup/execution.
>>
>> my 0.02 euros
>>
>>>
>>> - Brett
>>>
>>> --
>>> Brett Porter
>>> [email protected]
>>> http://brettporter.wordpress.com/
>>> http://au.linkedin.com/in/brettporter
>>> http://twitter.com/brettporter
>>>
>>>
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>>
>>
>
>
> --
> John Casey
> Developer, PMC Chair - Apache Maven (http://maven.apache.org)
> Blog: http://www.johnofalltrades.name/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]