Определение
Аннотация определяется с помощью ключевого слова @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
|
@AnAnnotationpublic 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 .
Статьи по Теме :