2015-11-06 2 views
0

Я редко пишу annotaions, но он широко используется в java frameworks.Метод аннотации принимает аргументы?

меня исследовать источник аннотаций и у меня есть вопрос

Всех источники метод аннотации, что я видел, не принимают аргументы.

пример (из пружинного MVC):

@Target({TYPE, FIELD, METHOD}) 
@Retention(RUNTIME) 
public @interface Resource { 
    /** 
    * The JNDI name of the resource. For field annotations, 
    * the default is the field name. For method annotations, 
    * the default is the JavaBeans property name corresponding 
    * to the method. For class annotations, there is no default 
    * and this must be specified. 
    */ 
    String name() default ""; 

    /** 
    * The name of the resource that the reference points to. It can 
    * link to any compatible resource using the global JNDI names. 
    * 
    * @since Common Annotations 1.1 
    */ 

    String lookup() default ""; 

    /** 
    * The Java type of the resource. For field annotations, 
    * the default is the type of the field. For method annotations, 
    * the default is the type of the JavaBeans property. 
    * For class annotations, there is no default and this must be 
    * specified. 
    */ 
    Class<?> type() default java.lang.Object.class; 

    /** 
    * The two possible authentication types for a resource. 
    */ 
    enum AuthenticationType { 
      CONTAINER, 
      APPLICATION 
    } 

    /** 
    * The authentication type to use for this resource. 
    * This may be specified for resources representing a 
    * connection factory of any supported type, and must 
    * not be specified for resources of other types. 
    */ 
    AuthenticationType authenticationType() default AuthenticationType.CONTAINER; 

    /** 
    * Indicates whether this resource can be shared between 
    * this component and other components. 
    * This may be specified for resources representing a 
    * connection factory of any supported type, and must 
    * not be specified for resources of other types. 
    */ 
    boolean shareable() default true; 

    /** 
    * A product specific name that this resource should be mapped to. 
    * The name of this resource, as defined by the <code>name</code> 
    * element or defaulted, is a name that is local to the application 
    * component using the resource. (It's a name in the JNDI 
    * <code>java:comp/env</code> namespace.) Many application servers 
    * provide a way to map these local names to names of resources 
    * known to the application server. This mapped name is often a 
    * <i>global</i> JNDI name, but may be a name of any form. <p> 
    * 
    * Application servers are not required to support any particular 
    * form or type of mapped name, nor the ability to use mapped names. 
    * The mapped name is product-dependent and often installation-dependent. 
    * No use of a mapped name is portable. 
    */ 
    String mappedName() default ""; 

    /** 
    * Description of this resource. The description is expected 
    * to be in the default language of the system on which the 
    * application is deployed. The description can be presented 
    * to the Deployer to help in choosing the correct resource. 
    */ 
    String description() default ""; 
} 

может аннотацию methood принимает аргументы?

ответ

5

Короткий ответ: нет

Аннотации на самом деле не имеют методов. У них есть атрибуты (с необязательными значениями по умолчанию), которые выглядят синтаксически подобными методам.

+0

Как насчет долгого ответа? – gstackoverflow

+0

вы можете добавить дополнительные атрибуты, семантически похожие на параметры. Я имею в виду что-то вроде @MyAnnotation (myMethodLikeAttribute = "maybeNotStringButBoolean", myParamLikeAttribute1 = "paramVal1", myParamLikeAttribute2 = "paramVal2") – erosb

Смежные вопросы