View Javadoc

1   /* Copyright (c) 2008 Sascha Kohlmann
2    *
3    * This program is free software: you can redistribute it and/or modify
4    * it under the terms of the GNU Affero General Public License as published by
5    * the Free Software Foundation, either version 3 of the License, or
6    * (at your option) any later version.
7    *
8    * This program is distributed in the hope that it will be useful,
9    * but WITHOUT ANY WARRANTY; without even the implied warranty of
10   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   * GNU Affero General Public License for more details.
12   *
13   * You should have received a copy of the GNU Affero General Public License
14   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15   */
16  package net.sf.eos.config;
17  
18  import java.lang.annotation.Documented;
19  import java.lang.annotation.Retention;
20  import java.lang.annotation.Target;
21  
22  import net.sf.eos.Experimental;
23  
24  import static java.lang.annotation.ElementType.METHOD;
25  import static java.lang.annotation.RetentionPolicy.RUNTIME;
26  
27  
28  /**
29   * Identifies a method in a class as a factory method. A factory method has
30   * always a {@linkplain Configuration configuration key} in which the name
31   * of the implementing class is stored.
32   * @author Sascha Kohlmann
33   */
34  @Documented
35  @Retention(value=RUNTIME)
36  @Target(value=METHOD)
37  @Experimental
38  public @interface FactoryMethod {
39  
40      /** Default none implementation. */
41      static class None {
42          private None() {
43              ;
44          }
45      }
46  
47      /** Contains the name of the configuration key.
48       * @return the configuration key. */
49      String key();
50  
51      /**
52       * The class of the default implementation if available.
53       * @return the name of the default implementation.
54       */
55      Class<?> implementation() default None.class;
56  }