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