Professional Documents
Culture Documents
Referencias
http://www128.ibm.com/developerworks/java/library/jannotate1/ http://download.oracle.com/javase/1,5.0/docs /guide/language/annotations.html
Meta-Data
Meta-data es data about data Existe desde Java 5.0 Mecanismo para adicionar anotaciones Anotaciones son modificadores que se pueden adicionar al cdigo y aplicarlos sobre declaraciones de tipos, constantes, mtodos, atributos, etc. Existen anotaciones predefinidas y tipos de anotaciones definidas por el desarrollador Java 5.0 ofrece un mecanismo para acceder a las anotaciones va introspeccin
3
Meta-Data
Informacin adicional (anotaciones) atadas a los elementos de un programa (atributos, mtodos, clases, etc.). Ejemplo: Xdoclet
// @ejb.name = Task
La semntica de las anotaciones puede ser desde documentacin hasta cambiar el comportamiento del mtodo.
4
Para qu sirve?
Documentacin:
ejemplo: javadoc, @uml
Anlisis de cdigo
ejemplo: xdoclet
Conceptos Bsicos
Marker annotations:
No tienen variables Se identifican por un nombre No incluye informacin adicional Ejemplo: @MarkerAnnotation
Conceptos Bsicos
Single-value annotations:
Parecidas a las marcas Proveen una informacin simple Ejemplo:
@SingleValueAnnotation("my data")
Conceptos Bsicos
Full annotations:
Tienen atributos y valores Ejemplo:
@FullAnnotation(var1="data value 1", var2="data value 2", var3="data value 3")
Conceptos Bsicos
@TODOItems({ // Arreglo de anotaciones @TODO( severity=TODO.CRITICAL, item="Add functionality to calculate .., assignedTo="Brett McLaughlin" ), @TODO( severity=TODO.IMPOTANT, item="Print usage message to screen .., assignedTo="Brett McLaughlin" ), @TODO( severity=TODO.LOW, item="Roll a new website page with... , assignedTo="Jason Hunter" ) })
Anotaciones Predefinidas
Override annotation Deprecated annotation SuppressWarnings annotation
10
Override annotation
Solo se puede utilizar en mtodos Es equivalente a un comentario que indica que el mtodo anotado sobrecarga el mtodo de la superclase. La diferencia con el comentario e squ eel compilador ahace un chequeo
11
package com.oreilly.tiger.ch06; public class OverrideTester { public OverrideTester() { } @Override public String toString() { return " [Override Tester Implementation]"; } @Override public int hashCode() { return toString().hashCode(); } }
12
Deprecated annotation
package com.oreilly.tiger.ch06; public class DeprecatedClass { @Deprecated public void doSomething() { // some code } public void doSomethingElse() { // This method presumably does what doSomething() does, but better } }
13
SuppressWarnings annotation
til en versiones de java que no soportan ciertos nuevos hechos. Por ejemplo generics.
@SuppressWarnings(value={"unchecked"}) public void nonGenericsMethod() { List wordList = new ArrayList(); // no typing information on the List wordList.add("foo"); // causes error on list addition }
14
15
16
17
18
20
package com.oreilly.tiger.ch06; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Documented @Retention(RetentionPolicy.RUNTIME) public @interface InProgress { }
21
public class Account { ... @Transactional(kind=Required) public void credit(float amount) { ... } @Transactional(kind=Required) public void debit(float amount) { ... } public float getBalance() { ... } ... }
pointcut execution( @Transactional * *.*(..)); Por ahora el lenguaje no permite utilizar propiedades de las anotaciones para definir los pointcuts:
pointcut execution(@Transactional(kind==RequiredNew) *.*(..))
22
Object around (Transactional tx) : transactedOps(tx) { if (tx.value() == Required) { // implement the required transaction behavior } else if(tx.value() == RequiredNew) { // implement the required-new transaction // behavior } ... }
23
24