Vous êtes sur la page 1sur 29

DEPARTAMENTO DE SISTEMAS

POJOs / Anotaciones
DEPARTAMENTO DE SISTEMAS
Agenda

•  Anotaciones
•  POJOS
•  Inyección de Dependencias
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Las anotaciones son marcas (tags) que se


insertan en el código fuente
•  Son interpretadas por herramientas de
procesamiento
o  A nivel de código fuente
o  A nivel de los archivos .class
•  Las anotaciones no cambian la forma en que
un programa es compilado
•  Inicialmente definidas en el JDK 5.0
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  En general su utilización requiere


o  Diseñar las anotaciones
o  Utilizarlas en el código fuente
o  Utilizar una herramienta de procesamiento para
analizarlas
o  Reaccionar ante cada anotación encontrada
•  Usos frecuentes
o  Generación automática de archivos
  Descriptores
  Clases Java
o  Generación automática de código
  Testing, Logging,etc.
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  En java una anotación es usada como un


modificador (public, static, ..)
o  Se inserta antes del elemento anotado sin “;”
•  El nombre de cada anotación es precedido del
símbolo “@”
•  No genera documentación ni es parte de
Javadoc
•  Las anotaciones son parte del código
•  Las anotaciones pueden tener elementos
o  Ej: @TestCase (id=“12244”)
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Las anotaciones pueden ser utilizadas en


o  Metodos
o  Clases
o  Atributos
o  Variables
•  Una anotación puede ir en donde se posible
utilizar public y static
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Cada anotación debe ser definida por una


interfaz de anotación
•  Los métodos de la interfaz corresponden a los
elementos de la anotación
•  Las anotaciones se definen en el código fuente
•  El compilador las conserva en el .class
•  La máquina virtual las carga
•  Se debe utilizar un mecanismo para
analizarlas
DEPARTAMENTO DE SISTEMAS
Anotaciones

Una anotación es definida por una interfaz


modifiers @interface AnnotationName
{
element declaration1
element declaration2
...
}

Cada elemento “declaration” tiene la forma


type elementName(); type elementName() default value;

Ejemplo:
public @interface BugReport {
String assignedTo() default "[none]";
int severity() = 0;
}
DEPARTAMENTO DE SISTEMAS
Anotaciones

Cada anotación tiene la forma:

@AnnotationName(elementName1=value1, elementName2=value2, . . .)

Algunos aspectos importantes:

- El orden de los elementos no es relevante

- Si se utilizan todos los valores por default o no hay argumentos no es


necesario usar paréntesis (Marker)

- Si un elemento tiene el nombre reservado “value” se puede omitir el


nombre del elemento y el operador de asignación “=”

public @interface @ActionListenerFor("yellowButton")


ActionListenerFor{ String value(); }
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Todas las interfaces de anotación extienden


o  Java.lang.annotation.Annotation
•  Las interfaces de anotación no pueden ser
extendidas
•  Nunca se proveen clases que implementen
las interfaces de anotación
•  La máquina virtual genera clases proxy y
objectos cuando se requieran
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  El tipo de un elemento de anotación puede


ser:
o  Tipo primitivo (int, short, long, byte, char,double,
float, boolean)
o  String
o  Class
o  Enum
o  Annotation
o  Arreglos de los tipos anteriores
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Ejemplo

public @interface BugReport {

enum Status { UNCONFIRMED, CONFIRMED, FIXED, NOTABUG };


boolean showStopper() default false;
String assignedTo() default "[none]";
Class<? extends Testable> testCase() default Testable.class;
Status status() default Status.UNCONFIRMED;
TestCase testCase();
String[] reportedBy();
}
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Se pueden agregar anotaciones a:

o  Paquetes
o  Clases
o  Enum
o  Métodos
o  Constructores
o  Variables locales
o  Parámetros
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Las anotaciones a variables locales solo


pueden ser procesadas a nivel del código
fuente
•  Estas anotaciones son descartadas cuando
la clase es compilada
•  Un item puede tener múltiples anotaciones
•  No se puede utilizar más de una misma
anotación por item
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Meta-Anotaciones
o  @Target
  Aplica a una anotación
  Especifica a que elementos puede aplicar la
anotación

o  @Retention
  Especifica por cuanto tiempo es retenida una
anotación
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  @Target – Valores para ElementType

@Target({ElementType.METHOD,ElementType.CONSTRUCTOR})
public @interface TestCase
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  @Retention

@Retention(RetentionPolicy.RUNTIME)
public @interface ActionListenerFor
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  La herramienta APT
o  Herramienta de procesamiento de anotaciones

o  Aplica para archivos fuente

o  El parser localiza anotaciones anlizando los


archivos .java
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Algoritmo de procesamiento
public void process()
{
for (TypeDeclaration t : env.getSpecifiedTypeDeclarations())
{
if (t.getModifiers().contains(Modifier.PUBLIC))
{
for (MethodDeclaration m : t.getMethods())
{
Property p = m.getAnnotation(Property.class);
if (p != null)
{
process property
}
}
}
write bean info source file
}
}
DEPARTAMENTO DE SISTEMAS
Anotaciones

•  Procesamiento de ByteCode
o  Normalmente requiere librerias de apoyo como
  BCEL (ByteCode Engineering Library)

•  Procesamiento de clases cargadas


o  Procesamiento con agentes
o  Se implementa una clase con un método
llamado premain
o  El programa a analizar se empaqueta y se
ejecuta junto con el agente
DEPARTAMENTO DE SISTEMAS
Agenda

•  Anotaciones
•  POJOs
•  Inyección de Dependencias
DEPARTAMENTO DE SISTEMAS
POJOs

•  Plain Old Java Objects


o  Objetos instanciados de una clase java que se
caracteriza por
o  Tener atributos
o  Los atributos son leidos y modificados via
“getters” y “setters”
o  Puenden tener otros métodos de negocio
DEPARTAMENTO DE SISTEMAS
POJOs

•  Ventajas de una programación basada en


POJOs
o  Simplicidad
  Normalmente no hay herencia ni implementación de
interfaces de frameworks

o  Mantenimiento
  KISS

o  Testing
  Junit

o  Reusabilidad
DEPARTAMENTO DE SISTEMAS
POJOs

•  Normalmente las aplicaciones empresariales


requieren
o  Transaccionalidad
o  Seguridad
o  Persistencia
•  Alternativas
o  “lightweight” frameworks
  Hibernate, JDO, iBATIS, Spring
o  Servidores JEE
  Glassfish, JBOSS, WebSphere, OAS
DEPARTAMENTO DE SISTEMAS
Agenda

•  Anotaciones
•  POJOS
•  Inyección de Dependencias
DEPARTAMENTO DE SISTEMAS
Inyección de Dependencias

•  Inversión de Control (IoC)


o  Patrón de diseño de software
o  El flujo de un sistema es invertido con respecto a
la secuencia tradicional de llamados a
procedimientos
o  El flujo es delegado en una tercera entidad externa
o  Esta entidad realiza la secuencia de llamados
basada en un conjunto de instrucciones
predefinidas
(Definición dada por Martin Fowler)
DEPARTAMENTO DE SISTEMAS
Inyección de Dependencias

•  Un caso particular de IoC es la Inyección de


Dependencias (DI)
o  Tradicionalmente cada objeto es responsable de
obtener sus propias referencias de los objetos
con los que colabora
o  Esto produce normalmente código altamente
acoplado y difícil de probar
o  Con la DI, los objetos obtienen sus
dependencias al momento de su creación por
una entidad externa
o  Es decir, las dependencias son inyectadas
DEPARTAMENTO DE SISTEMAS
Inyección de Dependencias

•  Con la Inyección de Dependencias


o  Se obtiene código bajamente acoplado
o  Facíl de probar
o  Los objetoso solo conocen sus dependencias
por sus interfaces (no sus implementaciones)
o  En términos generales no existe lookup
o  Inicialmente, esta inyección se definia mediante
descriptores externos (Archivos XML)
o  Ahora es mas común utilizar Anotaciones !!!
DEPARTAMENTO DE SISTEMAS
Bibliografía

•  Core Java 2 Volume II –Advanced Features, 7th Edition,


Cay S. Horstmann and Gary Cornell, Prentice Hall
•  The Java EE 5 Tutorial, Third Edition, Eric Jendrock et
al.
•  POJOs in Action, Developing Enterprise Applications
with Lightweight Frameworks, Chris Richardson

Vous aimerez peut-être aussi