isis2503-pojos
TRANSCRIPT
-
7/22/2019 isis2503-pojos
1/33
DEPARTAMENTO DE SISTEMAS
POJOs / Anotaciones
-
7/22/2019 isis2503-pojos
2/33
DEPARTAMENTO DE SISTEMAS
Agenda
Anotaciones POJOS Inyeccin de Dependencias
-
7/22/2019 isis2503-pojos
3/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Las anotaciones son marcas (tags) que seinsertan en el cdigo fuente
Son interpretadas por herramientas deprocesamiento
o A nivel de cdigo fuenteo A nivel de los archivos .class
Las anotaciones no cambian la forma en queun programa es compilado
Inicialmente definidas en el JDK 5.0
-
7/22/2019 isis2503-pojos
4/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
En general su utilizacin requiereo Disear las anotacioneso Utilizarlas en el cdigo fuenteo Utilizar una herramienta de procesamiento para
analizarlas
o Reaccionar ante cada anotacin encontrada Usos frecuentes
o Generacin automtica de archivos! Descriptores! Clases Java
o Generacin automtica de cdigo! Testing, Logging,etc.
-
7/22/2019 isis2503-pojos
5/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
En java una anotacin es usada como unmodificador (public, static, )
o Se inserta antes del elemento anotado, sin ; El nombre de cada anotacin es precedido del
smbolo @
No genera documentacin ni es parte deJavadoc
Las anotaciones son parte del cdigo Las anotaciones pueden tener elementos
o Ej: @TestCase(id=12244)
-
7/22/2019 isis2503-pojos
6/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Las anotaciones pueden ser utilizadas eno Interfaceso Claseso Mtodoso Atributoso Variables
Una anotacin puede ir en donde sea posibleutilizarpublic,static ofinal
-
7/22/2019 isis2503-pojos
7/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Cada anotacin debe ser definida por unainterfaz de anotacin
Los mtodos de la interfaz corresponden a loselementos de la anotacin
Las anotaciones se definen en el cdigo fuente El compilador las conserva en el .class La mquina virtual las carga Se debe utilizar un mecanismo para
analizarlas
-
7/22/2019 isis2503-pojos
8/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Una anotacin es definida por una interfazmodifiers@interface AnnotationName
{
element declaration1
element declaration2
...
}
Cada elemento declaration tiene la forma
type elementName(); type elementName() defaultvalue;
public @interface BugReport {
String assignedTo() default "[none]";
int severity() = 0;
}
Ejemplo:
-
7/22/2019 isis2503-pojos
9/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Cada anotacin 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 defecto o no hay argumentos no
es necesario usar parntesis (marker)
/**
* Indicates that the specification of the annotated API element
* is preliminary and subject to change*/
public @interface Preliminary { }
@Preliminarypublic class TimeTravel { ... }
-
7/22/2019 isis2503-pojos
10/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Algunos aspectos importantes:
/**
* Associates a copyright notice with the annotated API element
*/
public @interface Copyright
{
String value();
}
@Copyright(2008 European Organization for Nuclear Research")
public class LargeHadronCollider { ... }
Si un elemento tiene el nombre reservado value se puede omitirel nombre del elemento y el operador de asignacin =
-
7/22/2019 isis2503-pojos
11/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Todas las interfaces de anotacin extiendeno java.lang.annotation.Annotation
Las interfaces de anotacin no pueden serextendidas
Nunca se proveen clases que implementenlas interfaces de anotacin
La mquina virtual genera clasesproxy yobjetos cuando se requieran
-
7/22/2019 isis2503-pojos
12/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
El tipo de un elemento de anotacin puedeser:
o Tipo primitivo (int, short, long,byte, char,double, float,boolean)
o Stringo Classo Enumo Annotationo Arreglos de los tipos anteriores
-
7/22/2019 isis2503-pojos
13/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Ejemplopublic @interface BugReport {
enum Status { UNCONFIRMED, CONFIRMED, FIXED, NOTABUG };boolean showStopper() default false;
String assignedTo() default "[none]";
Class
-
7/22/2019 isis2503-pojos
14/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Se pueden agregar anotaciones a:o Paqueteso Claseso Enumeracioneso Mtodoso Constructoreso Variables localeso Parmetros
-
7/22/2019 isis2503-pojos
15/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Las anotaciones a variables locales solopueden ser procesadas a nivel del cdigofuente
Estas anotaciones son descartadas cuandola clase es compilada
Un item puede tener mltiples anotaciones No se puede utilizar ms de una misma
anotacin por item
-
7/22/2019 isis2503-pojos
16/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Meta-Anotacioneso @Target
! Aplica a una anotacin! Especifica a qu elementos puede aplicar la
anotacin
o @Retention! Especifica por cuanto tiempo es retenida una
anotacin
-
7/22/2019 isis2503-pojos
17/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
@Target Valores para ElementType
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface TestCase
-
7/22/2019 isis2503-pojos
18/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
@Retention
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionListenerFor
-
7/22/2019 isis2503-pojos
19/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Ejemplo/**
* Indicates that the annotated method is a test method.
*/
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)
public @interface Test { }
Definicin de la anotacin
Programa ejemplopublic class MyClass {
@Testpublic static voidm1() { }
public static voidm2() { }
@Testpublic static voidm3() {
throw new Exception("Boom");
}
}
-
7/22/2019 isis2503-pojos
20/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Ejemplopublic class RunTests {
public static voidmain(String[] args) throws Exception {
intpassed = 0, failed = 0;for (Method m : Class.forName(args[0]).getMethods()) {
if (m.isAnnotationPresent(Test.class)) {
try {
m.invoke(null);
passed++;} catch (Throwable ex) {
System.out.printf("Test failed: %s %n", m, ex.getCause());
failed++;
}}
}
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
}
}
Herramienta de prueba
-
7/22/2019 isis2503-pojos
21/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
La herramienta APT (Annotation ProcessingTool)
o Herramienta de procesamiento de anotacioneso Se basa en las anotaciones presentes en los
archivos fuente a ser examinados
o El parser localiza anotaciones analizando losarchivos .java
o Utiliza un conjunto de APIs de reflexin
-
7/22/2019 isis2503-pojos
22/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Algoritmo de procesamientopublic voidprocess()
{
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
}
}
-
7/22/2019 isis2503-pojos
23/33
DEPARTAMENTO DE SISTEMAS
Anotaciones
Procesamiento de ByteCodeo Normalmente requiere librerias de apoyo como
! BCEL (ByteCode Engineering Library)
Procesamiento de clases cargadaso Procesamiento con agenteso Se implementa una clase con un mtodo
llamadopremain
o El programa a analizar se empaqueta y seejecuta junto con el agente
-
7/22/2019 isis2503-pojos
24/33
DEPARTAMENTO DE SISTEMAS
Agenda
Anotaciones POJOs Inyeccin de Dependencias
-
7/22/2019 isis2503-pojos
25/33
DEPARTAMENTO DE SISTEMAS
POJOs
Plain Old Java ObjectsObjetos instanciados de una clase java que se
caracteriza por
o Tener atributoso Los atributos son leidos y modificados via
getters y setters
o Puenden tener otros mtodos de negocio
-
7/22/2019 isis2503-pojos
26/33
DEPARTAMENTO DE SISTEMAS
POJOs
Ventajas de una programacin basada enPOJOs
o Simplicidad! Normalmente no hay herencia ni implementacin de
interfaces de frameworks
o Mantenimiento! KISS (Keep It Short and Simple)
o Testing! JUnit
o Reusabilidad
-
7/22/2019 isis2503-pojos
27/33
DEPARTAMENTO DE SISTEMAS
POJOs
Normalmente las aplicaciones empresarialesrequieren
o Transaccionalidado Seguridado Persistencia
Alternativaso lightweight frameworks
! Hibernate, JDO, iBATIS, Springo Servidores JEE
! Glassfish, JBOSS, WebSphere, OAS
-
7/22/2019 isis2503-pojos
28/33
DEPARTAMENTO DE SISTEMAS
Agenda
Anotaciones POJOS Inyeccin de Dependencias
-
7/22/2019 isis2503-pojos
29/33
DEPARTAMENTO DE SISTEMAS
Inyeccin de Dependencias
Inversin de Control (IoC)o Patrn de diseo de softwareo 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 externao Esta entidad realiza la secuencia de llamados
basada en un conjunto de instrucciones
predefinidas
(Definicin dada por Martin Fowler)
-
7/22/2019 isis2503-pojos
30/33
DEPARTAMENTO DE SISTEMAS
Inyeccin de Dependencias
Un caso particular de IoC es la Inyeccin deDependencias (DI)
o Tradicionalmente cada objeto es responsable deobtener sus propias referencias de los objetos
con los que colabora
o Esto produce normalmente cdigo altamenteacoplado y difcil de probar
o Con la DI, los objetos obtienen susdependencias al momento de su creacin poruna entidad externa
o Es decir, las dependencias son inyectadas
-
7/22/2019 isis2503-pojos
31/33
DEPARTAMENTO DE SISTEMAS
Inyeccin de Dependencias
Con la Inyeccin de Dependenciaso Se obtiene cdigo bajamente acopladoo Facl de probaro Los objetos slo conocen sus dependencias por
sus interfaces (no sus implementaciones)
o En trminos generales no existe lookupo Inicialmente, esta inyeccin se definia mediante
descriptores externos (Archivos XML)
o Ahora es mas comn utilizar Anotaciones !!!
-
7/22/2019 isis2503-pojos
32/33
DEPARTAMENTO DE SISTEMAS
Inyeccin de Dependencias
Tomado de: EJB3 in Action
-
7/22/2019 isis2503-pojos
33/33
DEPARTAMENTO DE SISTEMAS
Bibliografa
Core Java 2 Volume II Advanced Features, 7thEdition,Cay S. Horstmann and Gary Cornell, Prentice Hall
The Java EE 5 Tutorial, Third Edition, Eric Jendrock etal.
POJOs in Action, Developing Enterprise Applicationswith Lightweight Frameworks, Chris Richardson
EJB3 in Action. Debu Panda, Reza Rahman, DerekLane. Mannaging Publications. 2006