Короче, все сложно.
Глава 1. Что там у джавы?
Смотрим сорцы Component:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any
*/
String value() default "";
}
Нам интересен @Target(ElementType.TYPE), чтобы узнать, что он значит, заглянем в
JLS 8 #9.6.4.1
Type declarations: class, interface, enum, and annotation type declarations (§8.1.1, §9.1.1, §8.5, §9.5, §8.9, §9.6)
Corresponds to java.lang.annotation.ElementType.TYPE
Additionally, annotation type declarations correspond to java.lang.annotation.ElementType.ANNOTATION_TYPE
В добавок, в
джава доках сказано:
public static final ElementType TYPE
Class, interface (including annotation type), or enum declaration
Значит, использовать Component на аннотации можно, а вот groovyc считает по-другому.
Глава 2. Другой груви.
Почему груви компилятор считаем по-другому? Поищем ответ на этот вопрос.
В
груви доках ничего похожего я не нашел, поэтому решил посмотреть в тоскливый ишью трекер груви проекта -
https://issues.apache.org/jira/browse/GROOVY.
Искал я долго и упорно какое-нибудь похожее ишью и нашел -
GROOVY-7151.
Кому лень идти по ссылке и читать рассказываю: проблема есть, пофикшена в компиляторе версии 2.5.0-beta-1.
Последняя релизная версия - 2.4.6.
Глава 3. Что делать?
1. Терпеть и ждать груви 2.5
2. Не использовать груви
3. Не использовать Component на аннотациях.