Статьи

Java аннотации и пример реального мира Spring

«Аннотация» — это тип определения языка программирования, используемый в качестве «маркера». Их можно рассматривать как строки комментариев, которые может понять движок языка программирования. Они не влияют напрямую на выполнение программы, но влияют косвенно, если это необходимо.

Определение

Аннотация определяется с помощью ключевого слова @interface и аналогична интерфейсу. У него есть атрибуты, которые определены как методы интерфейса. Атрибуты могут иметь значения по умолчанию. Давайте определим аннотацию с именем «Page», которая определяет страницы пользовательского интерфейса приложения:

1
2
3
4
5
6
public @interface Page {
    int    id();
    String url();
    String icon() default "[none]";
    String name(); default "[none]";
}

использование

Аннотации широко используются для информирования компилятора или времени компиляции / времени выполнения / времени развертывания.
Использование аннотации проще:

1
2
@Page(id=1, url=”studentView”, icon=“icons/student.png”, name=”Students”)
public class StudentWindow extends Window { … }

Аннотации также могут быть определены для методов и атрибутов:

1
2
3
4
5
@AnAnnotation
public String getElementName() {…}
 
@AnAnnotation(type=”manager”, score=3)
public int income;

Примеры

1) Отражение / генерация кода:

Методы с определенной аннотацией могут быть обработаны во время выполнения:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public @interface MyAnnotation { ... }
public class TestClass {
    @MyAnnotation
    public static method1() { ... }
    @MyAnnotation
    public static method2() { ... }
    @MyAnnotation
    public static method3() { ... }
}
 
public static void main(String[] args) {
    for (Method method : Class.forName("TestClass").getMethods()) {
        if (method.isAnnotationPresent(MyAnnotation.class)) {
            // do what you want
        }
    }
}

2) Конфигурация Spring bean (этот раздел требует знания конфигурации Spring bean):

Давайте снова используем нашу аннотацию «Page»:

1
2
3
4
5
6
7
package com.cmp.annotation;
public @interface Page {
    int    id();
    String url();
    String icon() default "[none]";
    String name(); default "[none]";
}

Скажем, у нас есть несколько классов с аннотацией @Page в пакете:

1
2
@Page(id=1, url=”studentView”, icon=“icons/student.png”, name=”Students”)
public class StudentWindow extends Window { … }

Если мы определим конфигурацию bean-компонента, как показано ниже в файле Spring application-context.xml, Spring создаст экземпляры класса «с аннотацией @Page», помещенные в «данный пакет».

1
2
3
<context:component-scan base-package="com.cmp.ui" annotation-config="true">
<context:include-filter type="annotation" expression="com.cmp.annotation.Page"/>
</context:component-scan>

Итак, мы принудительно установили Spring для создания экземпляров только классов во время выполнения.

Для более подробной информации об аннотациях, пожалуйста, обратитесь к:

http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html
http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html

Ссылка: Java-аннотации и пример «Реальный мир весны» от нашего партнера по JCG Кагдаса Басаранера в блоге CodeBalance .

Статьи по Теме :