SlideShare una empresa de Scribd logo
http://www.springframework.org
ÍNDICE
ÍNDICE
 Spring - ¿Qué es?
 Spring – IoC
 Spring - AOP
© Reservados todos los derechos. El contenido de la presente no puede ser reproducido, ni en todo ni en parte, ni
transmitido, ni registrado por ningún sistema de recuperación de información, en ninguna forma ni por ningún medio,
sin el permiso previo, por escrito, de IT Deusto.
¿Qué es?
Spring - ¿Qué es?
 Spring es un framework open-source, introducido y desarrollado en 2004.
Las principales ideas las sugerió un arquitecto J2EE con reconocida
experiencia, Rod Johnson.
 El había escrito antes un libro titulado 'J2EE Develoment without using
EJB' (‘Desarrollo J2EE sin usar EJB’) y había introducido el concepto de
Light-weight container (contenedor ligero). Ante todo, su argumento es que
mientras EJB tiene sus ventajas, no es siempre necesario y conveniente
en todas las aplicaciones.
 En Spring, podemos hacer uso de Java Beans para lograr cosas que antes
sólo eran posibles con EJB. El mayor logro de Spring es simplificar el
desarrollo y las pruebas unitarias. El framework Spring se puede usar en
modo modular, permite el uso en partes y dejar los otros componentes que
no son requeridos por la aplicación.
Spring - ¿Qué es? - EJB’s vs Spring
Es gestionada por el contenedorComputación distribuida
La implementación de usuarios y roles es
específica al contenedor
Seguridad declarativa
Soporta varias tecnologías tales como
JDBC, Hibernate, JDO, Ibatis, etc…º
Gestionada por el bean o por el contenedorPersistencia
Permite definir declarativamente el
comportamiento de rollback
No permite definir declarativamente el
comportamiento de rollback
Soporte para transaccionalidad
declarativa
Soporta varios modelos
transaccionales: JTA, Hibernate,
JDO, JDBC, etc,,
No tiene soporte nativo para
transacciones distribuidas
Necesita un gestor transaccional JTA
Soporta transaccionalidad distribuida
Gestión transaccional
SpringEJBCaracterística
Servicios http (propios de Spring). Se
trata de exponer un servicio http
mediante RMI.
Acegi Security System for Spring
http://acegisecurity.org/
Spring - ¿Qué es?
 Es un framework contenedor de IoC (Inversion of Control) y AOP(Aspect
Oriented Programming) ligero.
 Ligero. Puede ser distribuido en un simple JAR de 1 MB. No es intrusivo. Los
componentes desarrollados con Spring no dependen de clases de Spring
 Inversion of Control. Técnica con el objetivo de facilitar el desacoplo. Las
dependencias con los objetivos son proporcionadas de un modo pasivo. El
componente no está encargado de obtener sus dependencias. Ejemplo:
localización de un EJB.
 Orientación a aspectos: Permite proporcionar los servicios middleware a los
componentes que desarrollamos. El desarrollador sólo piensa en la lógica de
negocio. Ejemplo de servicios: transaccionalidad, seguridad, auditoria,
logging, etc…
 Contenedor: Gestiona el ciclo de vida de los objetos y su configuración . No
lo realiza de un modo tan pesado como el servidor de aplicaciones.
 Framework: Spring permite desarrollar aplicaciones complejas a partir de
componentes más sencillos. Spring proporciona mucha funcionalidad de
infraestructura
Spring - ¿Qué es?
 Es un framework contenedor de IoC (Inversion of Control) y AOP(Aspect
Oriented Programming) ligero.
 Ligero. Puede ser distribuido en un simple JAR de 1 MB. No es intrusivo. Los
componentes desarrollados con Spring no dependen de clases de Spring
 Inversion of Control. Técnica con el objetivo de facilitar el desacoplo. Las
dependencias con los objetivos son proporcionadas de un modo pasivo. El
componente no está encargado de obtener sus dependencias. Ejemplo:
localización de un EJB.
 Orientación a aspectos: Permite proporcionar los servicios middleware a los
componentes que desarrollamos. El desarrollador sólo piensa en la lógica de
negocio. Ejemplo de servicios: transaccionalidad, seguridad, auditoria,
logging, etc…
 Contenedor: Gestiona el ciclo de vida de los objetos y su configuración . No
lo realiza de un modo tan pesado como el servidor de aplicaciones.
 Framework: Spring permite desarrollar aplicaciones complejas a partir de
componentes más sencillos. Spring proporciona mucha funcionalidad de
infraestructura
Note: La distribución Spring viene en un fichero .jar grande y de forma alternativa como
una serie de pequeños jars correspondientes a cada uno de los módulos que aparecen en
la imagen superior (así puedes incluir sólo los que necesites)
Spring - ¿Qué es?
Spring - ¿Qué es?
 Core Container: El “core container” proporciona la funcionalidad
fundamental de Spring. Su componente principal es la 'BeanFactory', una
implementación del patrón Factory. La BeanFactory aplica el patrón IOC para
separar la configuración de la aplicación y otras dependencias del código de
la aplicación.
 Spring Context/Application Context: El “Spring context” es un archivo de
configuración que proporciona información de contexto al framework Spring.
El “Spring context” suministra servicios empresariales tales como JNDI
access, EJB integration, e-mail, internalization, validation y scheduling
functionality.
 Spring AOP:(Aspect-Oriented): El módulo de “Spring AOP” integra la
funcionalidad de la programación orientada a aspectos directamente en el
framework Spring, a través de su sistema de gestión de configuración. En
consecuencia podemos hacer que cualquier objeto gestionado por el Spring
framework sea “AOP-enable”. El módulo “Spring AOP” proporciona servicios
de gestión de transacción para objetos en cualquier aplicación basada en
Spring. Con “Spring AOP” podemos incorporar gestión de transacción
declarativa en nuestras aplicaciones sin depender de componentes EJB.
Spring - ¿Qué es?
 Spring DAO: Las capas de abstracción JDBC y DAO de Spring ofrecen una jerarquía
de excepciones muy descriptiva para gestionar la conexión con la base de datos,
manejar excepciones y mensajes de error lanzados por diferentes proveedores de
bases de datos. La jerarquía de excepciones simplifica el manejo de errores y reduce
enormemente la cantidad de código que necesitamos para escribir, como por ejemplo
la apertura y cierre de conexiones. Este módulo también proporciona servicios de
gestión de transacción para los objetos de una aplicación Spring.
 Spring ORM: El framework Spring puede integrarse con varios frameworks ORM
como Toplink, JDO, Hibernate, OJB y iBatis SQL Maps.
 Spring Web module: El módulo “Web context” está construido sobre el módulo
“application context”, proporcionando contextos para aplicaciones web. En
consecuencia, el framework Spring soporta la integración con Jakarta Struts, JSF y
webworks. El módulo Web también facilita la tarea de manejar los parámetros de
“multipart requests”.
 Spring MVC Framework: El framework MVC es una implementación completa del
patrón MVC para construir aplicaciones Web. El framework MVC es sumamente
configurable a través de interfaces y contiene numerosas tecnologías de vistas
incluyendo JSP, Velocity, Tiles y la generación de PDF y Archivos Excel.
12
Spring - en la capa cliente
 Se integra con los frameworks open source más usados del
mercado: Struts, Tapestry, Java Server Faces, WebWork.
 Posibilidad de definir flujos de navegación cliente con WebFlow.
 Permite desarrollo de clientes ligeros con tecnología de plantillas
facilitando la maquetación de la solución al equipo de diseño
gráfico. (Velocity, Freemarker).
 Permite generación de documentos PDF (itext), Excel (Jakarta
POI), generación dinámica de gráficos, etc..
 Permite aplicar IoC a las acciones de Struts pudiendo realizar
pruebas unitarias sobre la capa cliente sin necesidad de disponer
de un contenedor. (Mayor cobertura y flexibilidad en las pruebas)
13
Spring - Integración con Sistemas
Remotos
 Posibilidad de comunicarse con EJB’s. El código de búsqueda del
EJB es transparente al cliente (AOP), lo cual facilita las pruebas
unitarias.
 Comunicación RMI. Facilidad de exportar cualquier objeto como
servidor RMI. La búsqueda de servicios RMI se realiza de manera
transparente al cliente.
 Comunicación con servicios Hessian y Burlap de Caucho. (Web
Services ligeros).
 Comunicación con Web Services via JAX-RPC.
14
Spring - Acceso a servicios enterprise
 Servicio de Mail
 Planificación de trabajos con Quartz o Java Timer
 Servicio de mensajería Java (JMS)
 Servicio de nombres de Java (JNDI)
 Servicio de Autenticación y Autorización compatible con cualquier
servidor de aplicaciones o contenedor de servlets.
 Integración con Motores de Reglas compatibles con la
especificación JSR-94: Drools, Jess, etc.
15
Spring - Seguridad (Acegi Security)
 Seguridad declarativa con la posibilidad de securizar lógica de
negocio y de presentación.
 Separa la seguridad del negocio (Croscutting-concern)
 Soporta los mecanismos estándar de autenticación: Básica, SSL,
basada en formulario.
 Integración con BBDD, LDAP, JAAS (Java Authentication and
Authorization Service).
 Permite soluciones Single Sign-On con integración con CAS Yale
(Central Authorization Server).
 Definición de canales seguros: Se define declarativamente el
conjunto de recursos con encriptación (SSL) no permitiendo
comunicaciones no seguras automáticamente sobre los mismos.
16
Spring - Seguridad (II)
 Librería de tags para securización de componentes visuales.
 Permite mecanismos de cacheo.
 Codificación de password avanzada: SHA y MD5.
 Propagación transparente de seguridad: Permite transferir el
contexto de seguridad entre varios servidores mediante RMI.
 Configuración no intrusiva. Sólo requiere la instalación de un filtro.
No es necesario la inclusión de librerías extras para el despliegue
ni cambios especiales (ficheros descriptores de despliegue).
 Integración con cualquier servidor de aplicaciones.
Spring - IoC
IoC – ¿Qué es?
 Spring se basa en IoC. IoC es lo que nosotros conocemos como el Principio
de Inyección de Dependencias, Inversion of Control" (IoC) o patrón
Hollywood ("No nos llames, nosotros le llamaremos") consiste en:
 Un Contenedor que maneja objetos por ti.
 El contenedor generalmente controla la creación de estos objetos. Por decirlo de
alguna manera, el contenedor hace los “new” de las clases java para que no los
realices tu.
 El contenedor resuelve dependencias entre los objetos que contiene.
 Nosotros no conectamos nuestros componentes y servicios juntos en el
código pero describimos qué servicios necesita cada componente en un
archivo de configuración. Un contenedor es responsable de enlazarlo. Este
concepto es similar al de 'Declarative Management‘ (Gestión declarativa).
 Spring realmente viene con dos contenedores distintos: Bean Factories -
definidas por "org.springframework. beans.factory.BeanFactory" son los
contenedores más simples y proporcionan soporte para la inyección de
dependencias. Application Context (contextos de aplicaciones) – definidos
por "org.springframework.context.Application Context" proporcionan
servicios del framework para el desarrollo de aplicaciones, como la
capacidad de resolver mensajes textuales desde un archivo de propiedades.
IoC – Bean Factory
 BEAN FACTORY: La Bean factory es una implementación del patrón de
diseño Factory y su función es crear y proporcionar beans. Como la “bean
factory” reconoce muchos objetos en una aplicación, es capaz de crear una
asociación entre objetos colaboradores cuando éstos son instanciados.
 Estas son varias implementaciones de BeanFactory. La más útil es
"org.springframework.beans.factory.xml.XmlBeanFactory". Ésta carga
sus beans basándose en la definición contenida en un archivo XML. Para
crear un XmlBeanFactory, pasa un InputStream al constructor. La fuente
proporcionará un XML a la factory:
BeanFactory factory = new XmlBeanFactory(new
FileInputStream("myBean.xml"));
 Con ésta línea le decimos a la bean factory que lea la definición del bean del
archivo XML. La definición del bean incluye la descripción de beans y sus
propiedades. Pero la “bean factory” todavía no ha instanciado el bean. Para
recuperar un bean de una 'BeanFactory', se llama al método getBean().
Cuando el método getBean() es llamado, la factory instanciará el bean y
empezará a configurar las propiedades del bean usando inyección de
dependencias.
myBean bean1 = (myBean)factory.getBean("myBean");
IoC – Application Context
 APPLICATION CONTEXT: Mientras Bean Factory se usa para aplicaciones
simples, Application Context es el contenedor más avanzado de spring. Igual
que 'BeanFactory‘, puede ser usada para cargar definiciones de beans,
conectar beans y proporcionar beans bajo demanda.
 También proporciona:
1. Un medio para resolver mensajes de texto, incluyendo soporte para
internacionalización.
2. Una forma genérica de cargar recursos de fichero.
3. Eventos para beans que se registran como listeners.
 Por la funcionalidad adicional, es preferible usar 'Application Context' que
BeanFactory. Sólo cuando la fuente es escasa, como en aparatos móviles,
se usa 'BeanFactory‘.
IoC – Application Context
 Las tres implementaciones comúnmente usadas de 'Application Context'
son:
1. ClassPathXmlApplicationContext : Carga la definición del contexto de un archivo
XML situado en el classpath, tratando las definiciones del contexto como
recursos del classpath. El “application context” se carga del classpath de la
aplicación usando el código:
ApplicationContext context = new
ClassPathXmlApplicationContext("bean.xml");
1. FileSystemXmlApplicationContext : Carga la definición del contexto de un fichero
XML del sistema de archivos. El “application context” se carga del sistema de
archivos usando el código:
ApplicationContext context = new
FileSystemXmlApplicationContext("bean.xml");
2. XmlWebApplicationContext : Carga la definición del contexto de un archivo XML
situado dentro de una aplicación web. Spring es ligero tanto en tamaño como en
consumo de recursos. El framework Spring entero cabe en un único archivo JAR
que pesa sólo 1.7 MB. Y el consumo de procesador requerido por Spring es
insignificante. Spring tampoco es intrusivo:(por ejemplo) los objetos de una
aplicación Spring-enabled normalmente no dependen de las clases específicas
de Spring.
IoC – Wiring with XML
 Todos estos contenedores orientados a XML tienen sus beans definidos por
un archivo XML extraordinariamente simple.
IoC – Injecting dependecies via setter methods
 Es una técnica para rellenar los atributos de los beans basándose en la
convención standar de nombrado:
 Aqui estas estableciento un atributo int, pero podrías establecer cualquier
primitiva o atributo String de la misma manera. Spring determinará
automáticamente el tipo del atributo y lo convertirá adecuadamente.
IoC – Injecting dependecies via setter methods
 Referencing Beans: Como hicimos antes, usamos el elemento <property>
para establecer atributos que referencien otros beans. El subelemento <ref>
nos permite hacerlo:
 Inner Beans: Otra manera menos usada de enlazar referencias de beans es
incrustar un elemento <bean> directamente en un elemento <property>.
IoC – Injecting dependecies via constructor
 La inyección por Constructor es parecida, salvo que en este caso usarás el
subelemento <constructor-arg> de <bean> para especificar los argumentos
que has de pasar al constructor de un bean al instanciarlo. Una diferencia es
que el <constructor-arg> no contiene el nombre del atributo que hizo el
subelemento <property>.
 Argumentos ambiguos del constructor:
IoC – ¿Cuál elegir, setter o constructor?
 Argumentos a favor de la inyección por constructor:
 La inyección por constructor genera fuertes dependencias a la hora de
instanciar el bean. En pocas palabras, un bean no puede instanciarse sin
haber dado todas sus dependencias. Es perfectamente válido y está listo
para usar en la instanciación. Por supuesto, se supone que el constructor
del bean tiene todas las dependencias del bean en su lista de parámetros.
 Debido a que todas las dependencias del bean se establecen a través de
su constrcutor, no hay necesidad de métodos superfluos. Esto ayuda a
tener un menor número de líneas de código.
 Al permitir que los atributos se establezcan sólo en el constructor, estás
haciendo que esos atributos sean inalterables.
IoC – ¿Cuál elegir, setter o constructor?
 Argumentos en contra de la inyección por constructor:
 Si un bean tiene varias dependencias, la lista de parámetros del
constructor puede ser bastante larga.
 Si hay varias formas de construir un objeto válido, puede ser difícil
proponer un único constructor ya que los constructores sólo varían en el
número y el tipo de los parámetros.
 Si un constructor admite dos o más parámetros del mismo tipo, puede ser
dificil determinar para qué es cada uno.
 La inyección por Constructor no es la más adecuada para la herencia. Un
constructor de beans tendrá que pasar los parámetros a super() para
establecer los atributos privados en el objeto padre.
 Casi siempre utilizaremos el setter injection.
IoC – Autowiring
 Se puede enlazar Spring a los beans automáticamente estableciendo el
atributo “autowire” en cada <bean>:
Sin autowire
Con autowire
IoC – Autowiring
 Hay cuatro tipos de autowiring:
 byName: Trata de encontrar un bean en el contenedor cuyo nombre (o
ID) es el mismo al del atributo que va a ser enlazado. Si no se encuentra,
entonces el atributo permanerá sin enlazar.
 byType: Trata de encontrar un único bean en el contenedor cuyo tipo
coincida con el tipo del artibuto que va a ser enlazado. Si no se encuentra,
entonces el atributo no será enlazado. Si se encuentrá más de uno, se
lanzará una excepción
org.springrframework.beans.factory.UnsatisfiedDependencyExcpetion.
 Constructor: Trata de buscar una coincidencia entre uno o más beans en
el contenedor con los parámetros de uno de los construtores del bean que
se quiere enlazar. En el caso de beans ambiguos o constructores
ambiguos, se lanzará una excepción
org.springframework.beans.factory.UnsatisfiedDependencyException.
 Autodetect: Trata de enlazar por constructor primero y después usando
byType. La ambigüedad se maneja igual que con el enlace por constructor
y byType.
IoC – Lazily-instantiating beans
 El comportamiento por defecto para las implementaciones de
“ApplicationContext” es pre-instanciar todos los “singleton beans” al
comienzo. Pre-instanciación significa que una instancia de una
implementación de “ApplicationContext” creará y configurará todos sus
“singleton beans” como parte de su proceso de inicialización. Esto es
generalmente algo bueno, porque significa que cualquier error en la
configuración o en el entorno será descubierto inmediatamente (en vez de
que transcurran horas o incluso días).
 Sin embargo, hay veces en que este comportamiento no es el deseado. Si no
quieres que un “singleton bean” sea pre-instanciado cuando se usa una
implementación de “ApplicationContext”, puedes controlar esto de forma
selectiva, marcando el bean correspondiente como “lazy-initialized”. Un lazily-
initialized bean indica al IoC container si ha de instaciar o no el bean cuando
se arranca el contenedor o cuando es solicitado por primera vez.
IoC – Postprocessing beans
 Por el nombre se deduce que este proceso se realiza cuando salta algún tipo
de evento. El evento que tige el comportamiento de este postprocessing bean
es la instanciación y configuración de un bean. El BeanPostProcessor
interface te ofrece dos oportunidades de alterar un bean después de que ha
sido creado o enlazado:
 El método postProcessBeforeInitialization() es invocado inmediatamente
antes a la inicialización del bean (la llamada al afterPropertiesSet() y al
custom initmethod del bean). Asimismo, el ProcessAfterInitialization() method
es invocado inmediatamente después de la inicialización.
IoC – Postprocessing beans
 Para registrar los Postprocessing beans en el Application Context hay dos
mecanismos posibles:
 De forma programática registrando cada BeanPostProcessor usando el
método addBeanPostProcessor() de la Factory
 Registrar el postprocessor bean en el xml de definición del contexto:
 El contenedor reconocera el bean que declaremos como de tipo
BeanPostProcessor y llamará a sus métodos cada vez que es
instanciado.
IoC – Postprocessing the Bean Factory
 Un BeanFactoryPostProcessor realiza el postprocessing en un bean factory,
después que el bean factory haya cargado sus definiciones de beans pera
antes de que alguno de los beans haya sido instanciado. La interfaz
BeanFactoryPostProcessor es definida como sigue:
 El métdo postProcessBeanFactory() es llamado por el contenedor de Spring
después de que todas las definiciones de beans hayan sido cargadas pero
antes de que cualquier bean sea instanciado (incluidos los
BeanPostProcessor beans).
 Se suelen usar sólo los predefinidos en Spring:
 PropertyPlaceholderConfigurer
 PropertyOverrideConfigurer
IoC – Loading property files
 Lo podemos usar para internacionalización
 Es muy importante que el nombre de este bean sea “messageSource”
porque el ApplicationContext buscará un bean específico con ese nombre
cuando se encuentre configurando el origen de los mensajes de la
apliación.
 Podemos acceder a los mensajes de forma programática o usando tags
de spring en la jsp:
IoC – Loading property files
 Lo podemos usar para cargar datos de configuración dependientes del
entorno de ejecución
IoC – Loading property files
Spring - AOP
38
Introducción AOP
 Con AOP se pretende dar una solución fuera del ámbito de la POO que
permita implementar funcionalidad “transversal” a todas las capas.
 Croscutting Concern.
 El objetivo es que los desarrolladores de los componentes únicamente fijen
su atención en la lógica de negocio subyacente, aislándose de servicios
tales como transaccionalidad, seguridad, logging, etc…
Croscutting Concern
40
Introducción AOP
 Con programación orientada a objetos las posibles soluciones para
implementar estos “cross-cutting concern” (asuntos de carácter
universal) pasan por la herencia y la delegación.
 Con la herencia se puede llegar a una jerarquía de objetos
complicada.
 Con la delegación la solución es complicada y requiere de
llamadas duplicadas al objeto delegado.
 AOP permite definir la funcionalidad común en un único punto.
Declarativamente se define cómo y dónde esta funcionalidad es
aplicada sin la necesidad de modificar la clase a la que aplicas la
nueva funcionalidad.
41
Terminología AOP
 Aspect: Funcionalidad genérica que se está implementando. Ej:
Seguridad, logging, etc…
 Joinpoint: Punto de la ejecución de un programa donde un
aspecto puede ser introducido.
 Advice: Implementación actual de un Aspect.
 Pointcut: Define en qué joinpoints va a ser aplicado el advice.
Normalmente se indicará clases explícitas y un nombre de método,
pero también es posible definir expresiones regulares que definen
patrones para nombres de clases y nombres de métodos. Además
es posible en algunos AOP frameworks definir un pointcut en
tiempo de ejecución
42
Terminología AOP (II)
43
Terminología AOP (III)
 Introducción: Permite añadir atributos y métodos a clases existentes.
Ejemplo: Auditable advice
 Target: Clase a la que se le aplica un aspecto.
 Proxy: Es el objeto creado después de aplicar un aspecto a un objeto
target.
 Weaving: Es el proceso de aplicar aspectos a objetos targets para crear
un nuevo objeto proxy. Los aspectos son “tejidos” (woven) dentro de los
objetos target en los especificados joinpoints.
 El proceso de “tejido” puede realizarse en los siguientes momentos:
 Tiempo de compilación: Requiere un compilador especial.
 Tiempo de carga de clase: Aspectos son tejidos cuando el objeto target es
cargado dentro de la JVM. Requiere un classloader especial que aumente el
bytecode de la clase target antes de que la clase sea introducida dentro de la
aplicación
 Tiempo de ejecución. El contenedor AOP genera en proxy en tiempo de
ejecución.
44
Implementación AOP en Spring
 Los frameworks de AOP son diversos. Algunos presentan la
funcionalidad de aplicar aspectos cuando se modifica el valor de
un atributo, mientras que otros se quedan al nivel de invocación de
métodos.
 Nos centraremos en cómo Spring permite implementar AOP.
 Los advice de Spring están escritos en Java.
 Los pointcuts son definidos via XML dentro de la configuración de
Spring.
 Spring aplica los aspectos en tiempo de ejecución. Genera el proxy
cuando se carga el bean dentro del BeanFactory. No es necesario
ningún compilador especial.
45
Implementación AOP en Spring
 Genera los proxies de dos maneras:
 Si la clase target cumple un interfaz Spring usa la clase de la JDK
java.lang.reflect.Proxy.
 Si la clase target no cumple un interfaz se usa CGLIB (similar a
Hibernate para las propiedades/asociaciones perezosas). NO
RECOMENDADO
 No pueden aplicarse aspectos a métodos marcados como final.
Spring genera una subclase de la target.
 Sólo soporta joinpoints a nivel de método.
46
Advice. Tipos
47
Poincut. Tipos
 Permiten definir dónde los advice son aplicados.
 Pointcuts determinan si un determinado método de una
determinada clase cumple con un criterio particular.
 Spring permite que los advice sean tejidos dentro de las clases de
la aplicación de una manera flexible.
public interface Pointcut
{
public abstract ClassFilter getClassFilter();
public abstract MethodMatcher getMethodMatcher();
}
48
Pointcut interfaces. ClassFilter y MethodMatcher
public interface ClassFilter
{
public abstract boolean matches(Class targetClass);
}
public interface MethodMatcher
{
public abstract boolean matches(Method method, Class targetClass);
public abstract boolean isRuntime();
public abstract boolean matches(Method method, Class targetClass,
Object args[]);
}
49
Advisor
 La mayoría de aspectos son una combinación de la
implementación de los mismos (advice) que define el
comportamiento del aspecto y un pointcut que define donde el
aspecto debería ser ejecutado.
 En Spring la mayoría de pointcuts predefinidos tienen un advisor
asociado PointcutAdvisor.
 De esta forma la información está recogida en un único punto.
50
Pointcut estáticos
 StaticMethodMatcherPointcut es la clase base para poder crear
pointcuts estáticos. En el caso de necesitar implementar uno
propio únicamente es necesario sobreescribir esta clase e
implementar el método isMatch.
 Pointcut estáticos provistos por Spring:
 NameMatchMethodPointcut: Permite el uso de wildcard “*”
 public void setMappedName(String)
 public void setMappedNames(String[])
 Ej: set*  Todos los métodos setter
 Pointcut con expresiones regulares (RegExpMethodPointcut). Permite
definir expresiones regulares de tipo Perl para definir los métodos que
van a ser “interceptados”.
51
Pointcut dinámicos
 ControlFlowPointcut: Recoge la información de la pila de llamada
del thread actual. Ejemplo podríamos interceptar la llamada de un
determinado servlet mediante un MethodBeforeAdvice.
 Este tipo de pointcut tiene asociada una penalización del
rendimiento de la aplicación con respecto a otros pointcut
dinámicos. Java1.4 cinco veces más lento. Java1.3 diez veces más
lento.
 ControlFlowPointcut es el único pointcut dinámico provisto por
Spring. Recordar que se pueden desarrollar pointcut dinámicos
implementando el interfaz MethodMatcher devolviendo “true” en el
método isRuntime() del mencionado interfaz
52
Operaciones sobre pointcuts
 Spring permite la union y la intersección de pointcuts 
ComposablePointcut.
 Se pueden combinar cualquier número de pointcut, ClassFilter y
MethodMatcher.
53
Introductions
 Introductions son advice que afectan en el ámbito de clase,
permitiendo añadir métodos y atributos nuevos en la clase.
 Permite los mismos beneficios que la herencia múltiple.
 IntroductionMethodInterceptor es un subinterfaz de
MethodInterceptor añadiendo un método adicional:
 boolean implementsInterface(Class intf);
 Si el método implementsInterface devuelve “true” entonces
IntroductionMethodInterceptor es responsable de implementar el
mencionado interfaz. Cualquier invocación de un método declarado
en el interfaz será delegado al método invoke() de
IntroductionMethodInterceptor
 CUIDADO al llamar una clase con introduction fuera de Spring!!!
54
ProxyFactoryBean
55
Autoproxying
 Cuando el número de objetos proxy es pequeño con
ProxyFactorybean es suficiente. En el caso de aumentar el tamaño
de objetos proxy es necesario que el contenedor los cree de
manera explícita.
 Tipos:
 BeanNameAutoProxyCreator: Mediante una expresión podemos
identificar el conjunto de beans dentro de la factoría que se quiere
interceptar con un determinado advice
 DefaultAdvisorAutoProxyCreator: Sólo trabaja con advisor (ya que
necesita saber a qué beans debería aplicar el aspecto
 Similar a un BeanPostProcessor este bean peina el contexto en la
búsqueda de Advisor.
56
BeanNameAutoProxyCreator
57
DefaultAdvisorAutoProxyCreator
58
Metadata autoproxying
 Es posible que el proceso de autoproxy se base en metadatos
(atributos a nivel de fuente). Ejemplo: Transacción declarativa

Más contenido relacionado

La actualidad más candente

Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
Iker Canarias
 
Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)
Isidro José López Martínez
 
Sesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jeeSesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jee
Héctor Santos
 
Introducción a Spring framework
Introducción a Spring frameworkIntroducción a Spring framework
Introducción a Spring framework
Guillermo Daniel Salazar
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
Carlos Gavidia-Calderon
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframeworkVortexbird
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Frameworkecontinua
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
Jose Luis Bugarin Peche
 
Desarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEDesarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EE
Fernando Montaño
 
Spring framework
Spring frameworkSpring framework
Spring framework
San Juan Guichicovi
 
Framework spring
Framework springFramework spring
Framework spring
Frans Girón
 
Diapositivas Spring Framework- Javier Oliver Fulguera
Diapositivas Spring Framework-  Javier Oliver FulgueraDiapositivas Spring Framework-  Javier Oliver Fulguera
Diapositivas Spring Framework- Javier Oliver Fulguera
Javier Oliver Fulguera
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
Oliver Centeno
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
Jose Juan R. Zuñiga
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Emilio Aviles Avila
 
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidad
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidadOracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidad
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidadavanttic Consultoría Tecnológica
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
carlossanchezvillena
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframework
Vortexbird
 

La actualidad más candente (20)

Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)
 
Sesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jeeSesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jee
 
Introducción a Spring framework
Introducción a Spring frameworkIntroducción a Spring framework
Introducción a Spring framework
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframework
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
Desarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEDesarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EE
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Framework spring
Framework springFramework spring
Framework spring
 
Diapositivas Spring Framework- Javier Oliver Fulguera
Diapositivas Spring Framework-  Javier Oliver FulgueraDiapositivas Spring Framework-  Javier Oliver Fulguera
Diapositivas Spring Framework- Javier Oliver Fulguera
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
 
01 introducción
01 introducción01 introducción
01 introducción
 
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidad
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidadOracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidad
Oracle WebLogic Server 11g - Disponibilidad, rendimiento, escalabilidad
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframework
 

Destacado

Trabajo final
Trabajo finalTrabajo final
Trabajo finalbarrameda
 
Webinar "eMail Marketing en eCommerce: El desafío del Retail"
Webinar "eMail Marketing en eCommerce: El desafío del Retail" Webinar "eMail Marketing en eCommerce: El desafío del Retail"
Webinar "eMail Marketing en eCommerce: El desafío del Retail"
eCommerce Institute
 
Ofertas DICIEMBRE 2014
Ofertas DICIEMBRE 2014Ofertas DICIEMBRE 2014
Ofertas DICIEMBRE 2014
Salomé Martín-Caro Fernández
 
Doha 2006 sukan asia
Doha 2006 sukan asiaDoha 2006 sukan asia
Doha 2006 sukan asiaOlimpikini
 
Zend Solution Brief 0909 Web
Zend Solution Brief 0909 WebZend Solution Brief 0909 Web
Zend Solution Brief 0909 Web
Najeem Illyas
 
Cara de Um "Focinho" de Outro!
Cara de Um "Focinho" de Outro!Cara de Um "Focinho" de Outro!
Cara de Um "Focinho" de Outro!auricola
 
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
RebecaCruzPerez
 
Actividad2guiadeaprendizaje1 140526102933-phpapp02
Actividad2guiadeaprendizaje1 140526102933-phpapp02Actividad2guiadeaprendizaje1 140526102933-phpapp02
Actividad2guiadeaprendizaje1 140526102933-phpapp02
harvey rosero
 
Culegere de teste competenta lingvistica
Culegere de teste competenta lingvisticaCulegere de teste competenta lingvistica
Culegere de teste competenta lingvisticatdaniela2005br
 
Sugerencias para el collage
Sugerencias para el collageSugerencias para el collage
Sugerencias para el collage
Luis Alberto Santos Mancilla
 
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
NativeAD
 
Espo neumo tx asma
Espo neumo tx asmaEspo neumo tx asma
Espo neumo tx asma
Chava BG
 
Presentación Red de Mujeres Empresarias del Medio Rural
Presentación Red de Mujeres Empresarias del Medio RuralPresentación Red de Mujeres Empresarias del Medio Rural
Presentación Red de Mujeres Empresarias del Medio Rural
Yolanda Hernández
 
Historia de la silla de andar por casa
Historia de la silla de andar por casaHistoria de la silla de andar por casa
Historia de la silla de andar por casa
Rosalina Arenas Aguado
 
Cómo recortar un imagen de word
Cómo recortar un imagen de wordCómo recortar un imagen de word
Cómo recortar un imagen de worddayita12
 
Anatomía, fisiología y alteración de las uñas
Anatomía, fisiología y alteración de las uñasAnatomía, fisiología y alteración de las uñas
Anatomía, fisiología y alteración de las uñas
rumbero2011
 
20120822 conversion of historic newspapers to digital objects [russian state ...
20120822 conversion of historic newspapers to digital objects [russian state ...20120822 conversion of historic newspapers to digital objects [russian state ...
20120822 conversion of historic newspapers to digital objects [russian state ...Frederick Zarndt
 

Destacado (20)

Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
Webinar "eMail Marketing en eCommerce: El desafío del Retail"
Webinar "eMail Marketing en eCommerce: El desafío del Retail" Webinar "eMail Marketing en eCommerce: El desafío del Retail"
Webinar "eMail Marketing en eCommerce: El desafío del Retail"
 
Ofertas DICIEMBRE 2014
Ofertas DICIEMBRE 2014Ofertas DICIEMBRE 2014
Ofertas DICIEMBRE 2014
 
Doha 2006 sukan asia
Doha 2006 sukan asiaDoha 2006 sukan asia
Doha 2006 sukan asia
 
Zend Solution Brief 0909 Web
Zend Solution Brief 0909 WebZend Solution Brief 0909 Web
Zend Solution Brief 0909 Web
 
Cara de Um "Focinho" de Outro!
Cara de Um "Focinho" de Outro!Cara de Um "Focinho" de Outro!
Cara de Um "Focinho" de Outro!
 
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
clasificación de las dinámicas de grupos unicrece tercer semestre grupo pedag...
 
Actividad2guiadeaprendizaje1 140526102933-phpapp02
Actividad2guiadeaprendizaje1 140526102933-phpapp02Actividad2guiadeaprendizaje1 140526102933-phpapp02
Actividad2guiadeaprendizaje1 140526102933-phpapp02
 
Culegere de teste competenta lingvistica
Culegere de teste competenta lingvisticaCulegere de teste competenta lingvistica
Culegere de teste competenta lingvistica
 
Sugerencias para el collage
Sugerencias para el collageSugerencias para el collage
Sugerencias para el collage
 
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...
 
Espo neumo tx asma
Espo neumo tx asmaEspo neumo tx asma
Espo neumo tx asma
 
Presentación Red de Mujeres Empresarias del Medio Rural
Presentación Red de Mujeres Empresarias del Medio RuralPresentación Red de Mujeres Empresarias del Medio Rural
Presentación Red de Mujeres Empresarias del Medio Rural
 
Optica
Optica Optica
Optica
 
Historia de la silla de andar por casa
Historia de la silla de andar por casaHistoria de la silla de andar por casa
Historia de la silla de andar por casa
 
Cómo recortar un imagen de word
Cómo recortar un imagen de wordCómo recortar un imagen de word
Cómo recortar un imagen de word
 
Status asmatico
Status asmatico Status asmatico
Status asmatico
 
Anatomía, fisiología y alteración de las uñas
Anatomía, fisiología y alteración de las uñasAnatomía, fisiología y alteración de las uñas
Anatomía, fisiología y alteración de las uñas
 
20120822 conversion of historic newspapers to digital objects [russian state ...
20120822 conversion of historic newspapers to digital objects [russian state ...20120822 conversion of historic newspapers to digital objects [russian state ...
20120822 conversion of historic newspapers to digital objects [russian state ...
 
Propuesta de estrategia en social media
Propuesta de estrategia en social mediaPropuesta de estrategia en social media
Propuesta de estrategia en social media
 

Similar a spring

01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptx
johann
 
01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf
MarvelNanosoft
 
framework.pptx
framework.pptxframework.pptx
framework.pptx
jeremydelpezo2
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
Antonio Contreras
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
Paradigma Digital
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Robert Rayco Quiroz
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacionkaolong
 
01 jee5-componentes
01 jee5-componentes01 jee5-componentes
01 jee5-componentes
UTN
 
Capitulo_3_1.pptx
Capitulo_3_1.pptxCapitulo_3_1.pptx
Capitulo_3_1.pptx
VernicaPaulinaChimbo
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML
Juan Carlos Rubio Pineda
 
Development.in.Jain.Slee.(May.2009)
Development.in.Jain.Slee.(May.2009)Development.in.Jain.Slee.(May.2009)
Development.in.Jain.Slee.(May.2009)
Joaquin Ruiz Rojas
 
[ES] Introduccion a ADF Framework
[ES] Introduccion a ADF Framework[ES] Introduccion a ADF Framework
[ES] Introduccion a ADF Framework
Eudris Cabrera
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Javier Oliver Fulguera
 
[ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition [ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition
Eudris Cabrera
 
5 caracteristicas clave del marco Spring
5 caracteristicas clave del marco Spring5 caracteristicas clave del marco Spring
5 caracteristicas clave del marco Spring
Chetu
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVAjesanchez5
 
Conceptos de programación orientada a objeto
Conceptos de programación orientada a objetoConceptos de programación orientada a objeto
Conceptos de programación orientada a objetoJJ
 

Similar a spring (20)

01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptx
 
01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf
 
framework.pptx
framework.pptxframework.pptx
framework.pptx
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Frameworks Java
Frameworks JavaFrameworks Java
Frameworks Java
 
01 jee5-componentes
01 jee5-componentes01 jee5-componentes
01 jee5-componentes
 
Spring tutorial v0.271
Spring tutorial v0.271Spring tutorial v0.271
Spring tutorial v0.271
 
Capitulo_3_1.pptx
Capitulo_3_1.pptxCapitulo_3_1.pptx
Capitulo_3_1.pptx
 
Sercicios web
Sercicios webSercicios web
Sercicios web
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML
 
Development.in.Jain.Slee.(May.2009)
Development.in.Jain.Slee.(May.2009)Development.in.Jain.Slee.(May.2009)
Development.in.Jain.Slee.(May.2009)
 
[ES] Introduccion a ADF Framework
[ES] Introduccion a ADF Framework[ES] Introduccion a ADF Framework
[ES] Introduccion a ADF Framework
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
 
[ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition [ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition
 
5 caracteristicas clave del marco Spring
5 caracteristicas clave del marco Spring5 caracteristicas clave del marco Spring
5 caracteristicas clave del marco Spring
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVA
 
Conceptos de programación orientada a objeto
Conceptos de programación orientada a objetoConceptos de programación orientada a objeto
Conceptos de programación orientada a objeto
 

spring

  • 3. ÍNDICE  Spring - ¿Qué es?  Spring – IoC  Spring - AOP © Reservados todos los derechos. El contenido de la presente no puede ser reproducido, ni en todo ni en parte, ni transmitido, ni registrado por ningún sistema de recuperación de información, en ninguna forma ni por ningún medio, sin el permiso previo, por escrito, de IT Deusto.
  • 5. Spring - ¿Qué es?  Spring es un framework open-source, introducido y desarrollado en 2004. Las principales ideas las sugerió un arquitecto J2EE con reconocida experiencia, Rod Johnson.  El había escrito antes un libro titulado 'J2EE Develoment without using EJB' (‘Desarrollo J2EE sin usar EJB’) y había introducido el concepto de Light-weight container (contenedor ligero). Ante todo, su argumento es que mientras EJB tiene sus ventajas, no es siempre necesario y conveniente en todas las aplicaciones.  En Spring, podemos hacer uso de Java Beans para lograr cosas que antes sólo eran posibles con EJB. El mayor logro de Spring es simplificar el desarrollo y las pruebas unitarias. El framework Spring se puede usar en modo modular, permite el uso en partes y dejar los otros componentes que no son requeridos por la aplicación.
  • 6. Spring - ¿Qué es? - EJB’s vs Spring Es gestionada por el contenedorComputación distribuida La implementación de usuarios y roles es específica al contenedor Seguridad declarativa Soporta varias tecnologías tales como JDBC, Hibernate, JDO, Ibatis, etc…º Gestionada por el bean o por el contenedorPersistencia Permite definir declarativamente el comportamiento de rollback No permite definir declarativamente el comportamiento de rollback Soporte para transaccionalidad declarativa Soporta varios modelos transaccionales: JTA, Hibernate, JDO, JDBC, etc,, No tiene soporte nativo para transacciones distribuidas Necesita un gestor transaccional JTA Soporta transaccionalidad distribuida Gestión transaccional SpringEJBCaracterística Servicios http (propios de Spring). Se trata de exponer un servicio http mediante RMI. Acegi Security System for Spring http://acegisecurity.org/
  • 7. Spring - ¿Qué es?  Es un framework contenedor de IoC (Inversion of Control) y AOP(Aspect Oriented Programming) ligero.  Ligero. Puede ser distribuido en un simple JAR de 1 MB. No es intrusivo. Los componentes desarrollados con Spring no dependen de clases de Spring  Inversion of Control. Técnica con el objetivo de facilitar el desacoplo. Las dependencias con los objetivos son proporcionadas de un modo pasivo. El componente no está encargado de obtener sus dependencias. Ejemplo: localización de un EJB.  Orientación a aspectos: Permite proporcionar los servicios middleware a los componentes que desarrollamos. El desarrollador sólo piensa en la lógica de negocio. Ejemplo de servicios: transaccionalidad, seguridad, auditoria, logging, etc…  Contenedor: Gestiona el ciclo de vida de los objetos y su configuración . No lo realiza de un modo tan pesado como el servidor de aplicaciones.  Framework: Spring permite desarrollar aplicaciones complejas a partir de componentes más sencillos. Spring proporciona mucha funcionalidad de infraestructura
  • 8. Spring - ¿Qué es?  Es un framework contenedor de IoC (Inversion of Control) y AOP(Aspect Oriented Programming) ligero.  Ligero. Puede ser distribuido en un simple JAR de 1 MB. No es intrusivo. Los componentes desarrollados con Spring no dependen de clases de Spring  Inversion of Control. Técnica con el objetivo de facilitar el desacoplo. Las dependencias con los objetivos son proporcionadas de un modo pasivo. El componente no está encargado de obtener sus dependencias. Ejemplo: localización de un EJB.  Orientación a aspectos: Permite proporcionar los servicios middleware a los componentes que desarrollamos. El desarrollador sólo piensa en la lógica de negocio. Ejemplo de servicios: transaccionalidad, seguridad, auditoria, logging, etc…  Contenedor: Gestiona el ciclo de vida de los objetos y su configuración . No lo realiza de un modo tan pesado como el servidor de aplicaciones.  Framework: Spring permite desarrollar aplicaciones complejas a partir de componentes más sencillos. Spring proporciona mucha funcionalidad de infraestructura
  • 9. Note: La distribución Spring viene en un fichero .jar grande y de forma alternativa como una serie de pequeños jars correspondientes a cada uno de los módulos que aparecen en la imagen superior (así puedes incluir sólo los que necesites) Spring - ¿Qué es?
  • 10. Spring - ¿Qué es?  Core Container: El “core container” proporciona la funcionalidad fundamental de Spring. Su componente principal es la 'BeanFactory', una implementación del patrón Factory. La BeanFactory aplica el patrón IOC para separar la configuración de la aplicación y otras dependencias del código de la aplicación.  Spring Context/Application Context: El “Spring context” es un archivo de configuración que proporciona información de contexto al framework Spring. El “Spring context” suministra servicios empresariales tales como JNDI access, EJB integration, e-mail, internalization, validation y scheduling functionality.  Spring AOP:(Aspect-Oriented): El módulo de “Spring AOP” integra la funcionalidad de la programación orientada a aspectos directamente en el framework Spring, a través de su sistema de gestión de configuración. En consecuencia podemos hacer que cualquier objeto gestionado por el Spring framework sea “AOP-enable”. El módulo “Spring AOP” proporciona servicios de gestión de transacción para objetos en cualquier aplicación basada en Spring. Con “Spring AOP” podemos incorporar gestión de transacción declarativa en nuestras aplicaciones sin depender de componentes EJB.
  • 11. Spring - ¿Qué es?  Spring DAO: Las capas de abstracción JDBC y DAO de Spring ofrecen una jerarquía de excepciones muy descriptiva para gestionar la conexión con la base de datos, manejar excepciones y mensajes de error lanzados por diferentes proveedores de bases de datos. La jerarquía de excepciones simplifica el manejo de errores y reduce enormemente la cantidad de código que necesitamos para escribir, como por ejemplo la apertura y cierre de conexiones. Este módulo también proporciona servicios de gestión de transacción para los objetos de una aplicación Spring.  Spring ORM: El framework Spring puede integrarse con varios frameworks ORM como Toplink, JDO, Hibernate, OJB y iBatis SQL Maps.  Spring Web module: El módulo “Web context” está construido sobre el módulo “application context”, proporcionando contextos para aplicaciones web. En consecuencia, el framework Spring soporta la integración con Jakarta Struts, JSF y webworks. El módulo Web también facilita la tarea de manejar los parámetros de “multipart requests”.  Spring MVC Framework: El framework MVC es una implementación completa del patrón MVC para construir aplicaciones Web. El framework MVC es sumamente configurable a través de interfaces y contiene numerosas tecnologías de vistas incluyendo JSP, Velocity, Tiles y la generación de PDF y Archivos Excel.
  • 12. 12 Spring - en la capa cliente  Se integra con los frameworks open source más usados del mercado: Struts, Tapestry, Java Server Faces, WebWork.  Posibilidad de definir flujos de navegación cliente con WebFlow.  Permite desarrollo de clientes ligeros con tecnología de plantillas facilitando la maquetación de la solución al equipo de diseño gráfico. (Velocity, Freemarker).  Permite generación de documentos PDF (itext), Excel (Jakarta POI), generación dinámica de gráficos, etc..  Permite aplicar IoC a las acciones de Struts pudiendo realizar pruebas unitarias sobre la capa cliente sin necesidad de disponer de un contenedor. (Mayor cobertura y flexibilidad en las pruebas)
  • 13. 13 Spring - Integración con Sistemas Remotos  Posibilidad de comunicarse con EJB’s. El código de búsqueda del EJB es transparente al cliente (AOP), lo cual facilita las pruebas unitarias.  Comunicación RMI. Facilidad de exportar cualquier objeto como servidor RMI. La búsqueda de servicios RMI se realiza de manera transparente al cliente.  Comunicación con servicios Hessian y Burlap de Caucho. (Web Services ligeros).  Comunicación con Web Services via JAX-RPC.
  • 14. 14 Spring - Acceso a servicios enterprise  Servicio de Mail  Planificación de trabajos con Quartz o Java Timer  Servicio de mensajería Java (JMS)  Servicio de nombres de Java (JNDI)  Servicio de Autenticación y Autorización compatible con cualquier servidor de aplicaciones o contenedor de servlets.  Integración con Motores de Reglas compatibles con la especificación JSR-94: Drools, Jess, etc.
  • 15. 15 Spring - Seguridad (Acegi Security)  Seguridad declarativa con la posibilidad de securizar lógica de negocio y de presentación.  Separa la seguridad del negocio (Croscutting-concern)  Soporta los mecanismos estándar de autenticación: Básica, SSL, basada en formulario.  Integración con BBDD, LDAP, JAAS (Java Authentication and Authorization Service).  Permite soluciones Single Sign-On con integración con CAS Yale (Central Authorization Server).  Definición de canales seguros: Se define declarativamente el conjunto de recursos con encriptación (SSL) no permitiendo comunicaciones no seguras automáticamente sobre los mismos.
  • 16. 16 Spring - Seguridad (II)  Librería de tags para securización de componentes visuales.  Permite mecanismos de cacheo.  Codificación de password avanzada: SHA y MD5.  Propagación transparente de seguridad: Permite transferir el contexto de seguridad entre varios servidores mediante RMI.  Configuración no intrusiva. Sólo requiere la instalación de un filtro. No es necesario la inclusión de librerías extras para el despliegue ni cambios especiales (ficheros descriptores de despliegue).  Integración con cualquier servidor de aplicaciones.
  • 18. IoC – ¿Qué es?  Spring se basa en IoC. IoC es lo que nosotros conocemos como el Principio de Inyección de Dependencias, Inversion of Control" (IoC) o patrón Hollywood ("No nos llames, nosotros le llamaremos") consiste en:  Un Contenedor que maneja objetos por ti.  El contenedor generalmente controla la creación de estos objetos. Por decirlo de alguna manera, el contenedor hace los “new” de las clases java para que no los realices tu.  El contenedor resuelve dependencias entre los objetos que contiene.  Nosotros no conectamos nuestros componentes y servicios juntos en el código pero describimos qué servicios necesita cada componente en un archivo de configuración. Un contenedor es responsable de enlazarlo. Este concepto es similar al de 'Declarative Management‘ (Gestión declarativa).  Spring realmente viene con dos contenedores distintos: Bean Factories - definidas por "org.springframework. beans.factory.BeanFactory" son los contenedores más simples y proporcionan soporte para la inyección de dependencias. Application Context (contextos de aplicaciones) – definidos por "org.springframework.context.Application Context" proporcionan servicios del framework para el desarrollo de aplicaciones, como la capacidad de resolver mensajes textuales desde un archivo de propiedades.
  • 19. IoC – Bean Factory  BEAN FACTORY: La Bean factory es una implementación del patrón de diseño Factory y su función es crear y proporcionar beans. Como la “bean factory” reconoce muchos objetos en una aplicación, es capaz de crear una asociación entre objetos colaboradores cuando éstos son instanciados.  Estas son varias implementaciones de BeanFactory. La más útil es "org.springframework.beans.factory.xml.XmlBeanFactory". Ésta carga sus beans basándose en la definición contenida en un archivo XML. Para crear un XmlBeanFactory, pasa un InputStream al constructor. La fuente proporcionará un XML a la factory: BeanFactory factory = new XmlBeanFactory(new FileInputStream("myBean.xml"));  Con ésta línea le decimos a la bean factory que lea la definición del bean del archivo XML. La definición del bean incluye la descripción de beans y sus propiedades. Pero la “bean factory” todavía no ha instanciado el bean. Para recuperar un bean de una 'BeanFactory', se llama al método getBean(). Cuando el método getBean() es llamado, la factory instanciará el bean y empezará a configurar las propiedades del bean usando inyección de dependencias. myBean bean1 = (myBean)factory.getBean("myBean");
  • 20. IoC – Application Context  APPLICATION CONTEXT: Mientras Bean Factory se usa para aplicaciones simples, Application Context es el contenedor más avanzado de spring. Igual que 'BeanFactory‘, puede ser usada para cargar definiciones de beans, conectar beans y proporcionar beans bajo demanda.  También proporciona: 1. Un medio para resolver mensajes de texto, incluyendo soporte para internacionalización. 2. Una forma genérica de cargar recursos de fichero. 3. Eventos para beans que se registran como listeners.  Por la funcionalidad adicional, es preferible usar 'Application Context' que BeanFactory. Sólo cuando la fuente es escasa, como en aparatos móviles, se usa 'BeanFactory‘.
  • 21. IoC – Application Context  Las tres implementaciones comúnmente usadas de 'Application Context' son: 1. ClassPathXmlApplicationContext : Carga la definición del contexto de un archivo XML situado en el classpath, tratando las definiciones del contexto como recursos del classpath. El “application context” se carga del classpath de la aplicación usando el código: ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); 1. FileSystemXmlApplicationContext : Carga la definición del contexto de un fichero XML del sistema de archivos. El “application context” se carga del sistema de archivos usando el código: ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml"); 2. XmlWebApplicationContext : Carga la definición del contexto de un archivo XML situado dentro de una aplicación web. Spring es ligero tanto en tamaño como en consumo de recursos. El framework Spring entero cabe en un único archivo JAR que pesa sólo 1.7 MB. Y el consumo de procesador requerido por Spring es insignificante. Spring tampoco es intrusivo:(por ejemplo) los objetos de una aplicación Spring-enabled normalmente no dependen de las clases específicas de Spring.
  • 22. IoC – Wiring with XML  Todos estos contenedores orientados a XML tienen sus beans definidos por un archivo XML extraordinariamente simple.
  • 23. IoC – Injecting dependecies via setter methods  Es una técnica para rellenar los atributos de los beans basándose en la convención standar de nombrado:  Aqui estas estableciento un atributo int, pero podrías establecer cualquier primitiva o atributo String de la misma manera. Spring determinará automáticamente el tipo del atributo y lo convertirá adecuadamente.
  • 24. IoC – Injecting dependecies via setter methods  Referencing Beans: Como hicimos antes, usamos el elemento <property> para establecer atributos que referencien otros beans. El subelemento <ref> nos permite hacerlo:  Inner Beans: Otra manera menos usada de enlazar referencias de beans es incrustar un elemento <bean> directamente en un elemento <property>.
  • 25. IoC – Injecting dependecies via constructor  La inyección por Constructor es parecida, salvo que en este caso usarás el subelemento <constructor-arg> de <bean> para especificar los argumentos que has de pasar al constructor de un bean al instanciarlo. Una diferencia es que el <constructor-arg> no contiene el nombre del atributo que hizo el subelemento <property>.  Argumentos ambiguos del constructor:
  • 26. IoC – ¿Cuál elegir, setter o constructor?  Argumentos a favor de la inyección por constructor:  La inyección por constructor genera fuertes dependencias a la hora de instanciar el bean. En pocas palabras, un bean no puede instanciarse sin haber dado todas sus dependencias. Es perfectamente válido y está listo para usar en la instanciación. Por supuesto, se supone que el constructor del bean tiene todas las dependencias del bean en su lista de parámetros.  Debido a que todas las dependencias del bean se establecen a través de su constrcutor, no hay necesidad de métodos superfluos. Esto ayuda a tener un menor número de líneas de código.  Al permitir que los atributos se establezcan sólo en el constructor, estás haciendo que esos atributos sean inalterables.
  • 27. IoC – ¿Cuál elegir, setter o constructor?  Argumentos en contra de la inyección por constructor:  Si un bean tiene varias dependencias, la lista de parámetros del constructor puede ser bastante larga.  Si hay varias formas de construir un objeto válido, puede ser difícil proponer un único constructor ya que los constructores sólo varían en el número y el tipo de los parámetros.  Si un constructor admite dos o más parámetros del mismo tipo, puede ser dificil determinar para qué es cada uno.  La inyección por Constructor no es la más adecuada para la herencia. Un constructor de beans tendrá que pasar los parámetros a super() para establecer los atributos privados en el objeto padre.  Casi siempre utilizaremos el setter injection.
  • 28. IoC – Autowiring  Se puede enlazar Spring a los beans automáticamente estableciendo el atributo “autowire” en cada <bean>: Sin autowire Con autowire
  • 29. IoC – Autowiring  Hay cuatro tipos de autowiring:  byName: Trata de encontrar un bean en el contenedor cuyo nombre (o ID) es el mismo al del atributo que va a ser enlazado. Si no se encuentra, entonces el atributo permanerá sin enlazar.  byType: Trata de encontrar un único bean en el contenedor cuyo tipo coincida con el tipo del artibuto que va a ser enlazado. Si no se encuentra, entonces el atributo no será enlazado. Si se encuentrá más de uno, se lanzará una excepción org.springrframework.beans.factory.UnsatisfiedDependencyExcpetion.  Constructor: Trata de buscar una coincidencia entre uno o más beans en el contenedor con los parámetros de uno de los construtores del bean que se quiere enlazar. En el caso de beans ambiguos o constructores ambiguos, se lanzará una excepción org.springframework.beans.factory.UnsatisfiedDependencyException.  Autodetect: Trata de enlazar por constructor primero y después usando byType. La ambigüedad se maneja igual que con el enlace por constructor y byType.
  • 30. IoC – Lazily-instantiating beans  El comportamiento por defecto para las implementaciones de “ApplicationContext” es pre-instanciar todos los “singleton beans” al comienzo. Pre-instanciación significa que una instancia de una implementación de “ApplicationContext” creará y configurará todos sus “singleton beans” como parte de su proceso de inicialización. Esto es generalmente algo bueno, porque significa que cualquier error en la configuración o en el entorno será descubierto inmediatamente (en vez de que transcurran horas o incluso días).  Sin embargo, hay veces en que este comportamiento no es el deseado. Si no quieres que un “singleton bean” sea pre-instanciado cuando se usa una implementación de “ApplicationContext”, puedes controlar esto de forma selectiva, marcando el bean correspondiente como “lazy-initialized”. Un lazily- initialized bean indica al IoC container si ha de instaciar o no el bean cuando se arranca el contenedor o cuando es solicitado por primera vez.
  • 31. IoC – Postprocessing beans  Por el nombre se deduce que este proceso se realiza cuando salta algún tipo de evento. El evento que tige el comportamiento de este postprocessing bean es la instanciación y configuración de un bean. El BeanPostProcessor interface te ofrece dos oportunidades de alterar un bean después de que ha sido creado o enlazado:  El método postProcessBeforeInitialization() es invocado inmediatamente antes a la inicialización del bean (la llamada al afterPropertiesSet() y al custom initmethod del bean). Asimismo, el ProcessAfterInitialization() method es invocado inmediatamente después de la inicialización.
  • 32. IoC – Postprocessing beans  Para registrar los Postprocessing beans en el Application Context hay dos mecanismos posibles:  De forma programática registrando cada BeanPostProcessor usando el método addBeanPostProcessor() de la Factory  Registrar el postprocessor bean en el xml de definición del contexto:  El contenedor reconocera el bean que declaremos como de tipo BeanPostProcessor y llamará a sus métodos cada vez que es instanciado.
  • 33. IoC – Postprocessing the Bean Factory  Un BeanFactoryPostProcessor realiza el postprocessing en un bean factory, después que el bean factory haya cargado sus definiciones de beans pera antes de que alguno de los beans haya sido instanciado. La interfaz BeanFactoryPostProcessor es definida como sigue:  El métdo postProcessBeanFactory() es llamado por el contenedor de Spring después de que todas las definiciones de beans hayan sido cargadas pero antes de que cualquier bean sea instanciado (incluidos los BeanPostProcessor beans).  Se suelen usar sólo los predefinidos en Spring:  PropertyPlaceholderConfigurer  PropertyOverrideConfigurer
  • 34. IoC – Loading property files  Lo podemos usar para internacionalización  Es muy importante que el nombre de este bean sea “messageSource” porque el ApplicationContext buscará un bean específico con ese nombre cuando se encuentre configurando el origen de los mensajes de la apliación.  Podemos acceder a los mensajes de forma programática o usando tags de spring en la jsp:
  • 35. IoC – Loading property files  Lo podemos usar para cargar datos de configuración dependientes del entorno de ejecución
  • 36. IoC – Loading property files
  • 38. 38 Introducción AOP  Con AOP se pretende dar una solución fuera del ámbito de la POO que permita implementar funcionalidad “transversal” a todas las capas.  Croscutting Concern.  El objetivo es que los desarrolladores de los componentes únicamente fijen su atención en la lógica de negocio subyacente, aislándose de servicios tales como transaccionalidad, seguridad, logging, etc…
  • 40. 40 Introducción AOP  Con programación orientada a objetos las posibles soluciones para implementar estos “cross-cutting concern” (asuntos de carácter universal) pasan por la herencia y la delegación.  Con la herencia se puede llegar a una jerarquía de objetos complicada.  Con la delegación la solución es complicada y requiere de llamadas duplicadas al objeto delegado.  AOP permite definir la funcionalidad común en un único punto. Declarativamente se define cómo y dónde esta funcionalidad es aplicada sin la necesidad de modificar la clase a la que aplicas la nueva funcionalidad.
  • 41. 41 Terminología AOP  Aspect: Funcionalidad genérica que se está implementando. Ej: Seguridad, logging, etc…  Joinpoint: Punto de la ejecución de un programa donde un aspecto puede ser introducido.  Advice: Implementación actual de un Aspect.  Pointcut: Define en qué joinpoints va a ser aplicado el advice. Normalmente se indicará clases explícitas y un nombre de método, pero también es posible definir expresiones regulares que definen patrones para nombres de clases y nombres de métodos. Además es posible en algunos AOP frameworks definir un pointcut en tiempo de ejecución
  • 43. 43 Terminología AOP (III)  Introducción: Permite añadir atributos y métodos a clases existentes. Ejemplo: Auditable advice  Target: Clase a la que se le aplica un aspecto.  Proxy: Es el objeto creado después de aplicar un aspecto a un objeto target.  Weaving: Es el proceso de aplicar aspectos a objetos targets para crear un nuevo objeto proxy. Los aspectos son “tejidos” (woven) dentro de los objetos target en los especificados joinpoints.  El proceso de “tejido” puede realizarse en los siguientes momentos:  Tiempo de compilación: Requiere un compilador especial.  Tiempo de carga de clase: Aspectos son tejidos cuando el objeto target es cargado dentro de la JVM. Requiere un classloader especial que aumente el bytecode de la clase target antes de que la clase sea introducida dentro de la aplicación  Tiempo de ejecución. El contenedor AOP genera en proxy en tiempo de ejecución.
  • 44. 44 Implementación AOP en Spring  Los frameworks de AOP son diversos. Algunos presentan la funcionalidad de aplicar aspectos cuando se modifica el valor de un atributo, mientras que otros se quedan al nivel de invocación de métodos.  Nos centraremos en cómo Spring permite implementar AOP.  Los advice de Spring están escritos en Java.  Los pointcuts son definidos via XML dentro de la configuración de Spring.  Spring aplica los aspectos en tiempo de ejecución. Genera el proxy cuando se carga el bean dentro del BeanFactory. No es necesario ningún compilador especial.
  • 45. 45 Implementación AOP en Spring  Genera los proxies de dos maneras:  Si la clase target cumple un interfaz Spring usa la clase de la JDK java.lang.reflect.Proxy.  Si la clase target no cumple un interfaz se usa CGLIB (similar a Hibernate para las propiedades/asociaciones perezosas). NO RECOMENDADO  No pueden aplicarse aspectos a métodos marcados como final. Spring genera una subclase de la target.  Sólo soporta joinpoints a nivel de método.
  • 47. 47 Poincut. Tipos  Permiten definir dónde los advice son aplicados.  Pointcuts determinan si un determinado método de una determinada clase cumple con un criterio particular.  Spring permite que los advice sean tejidos dentro de las clases de la aplicación de una manera flexible. public interface Pointcut { public abstract ClassFilter getClassFilter(); public abstract MethodMatcher getMethodMatcher(); }
  • 48. 48 Pointcut interfaces. ClassFilter y MethodMatcher public interface ClassFilter { public abstract boolean matches(Class targetClass); } public interface MethodMatcher { public abstract boolean matches(Method method, Class targetClass); public abstract boolean isRuntime(); public abstract boolean matches(Method method, Class targetClass, Object args[]); }
  • 49. 49 Advisor  La mayoría de aspectos son una combinación de la implementación de los mismos (advice) que define el comportamiento del aspecto y un pointcut que define donde el aspecto debería ser ejecutado.  En Spring la mayoría de pointcuts predefinidos tienen un advisor asociado PointcutAdvisor.  De esta forma la información está recogida en un único punto.
  • 50. 50 Pointcut estáticos  StaticMethodMatcherPointcut es la clase base para poder crear pointcuts estáticos. En el caso de necesitar implementar uno propio únicamente es necesario sobreescribir esta clase e implementar el método isMatch.  Pointcut estáticos provistos por Spring:  NameMatchMethodPointcut: Permite el uso de wildcard “*”  public void setMappedName(String)  public void setMappedNames(String[])  Ej: set*  Todos los métodos setter  Pointcut con expresiones regulares (RegExpMethodPointcut). Permite definir expresiones regulares de tipo Perl para definir los métodos que van a ser “interceptados”.
  • 51. 51 Pointcut dinámicos  ControlFlowPointcut: Recoge la información de la pila de llamada del thread actual. Ejemplo podríamos interceptar la llamada de un determinado servlet mediante un MethodBeforeAdvice.  Este tipo de pointcut tiene asociada una penalización del rendimiento de la aplicación con respecto a otros pointcut dinámicos. Java1.4 cinco veces más lento. Java1.3 diez veces más lento.  ControlFlowPointcut es el único pointcut dinámico provisto por Spring. Recordar que se pueden desarrollar pointcut dinámicos implementando el interfaz MethodMatcher devolviendo “true” en el método isRuntime() del mencionado interfaz
  • 52. 52 Operaciones sobre pointcuts  Spring permite la union y la intersección de pointcuts  ComposablePointcut.  Se pueden combinar cualquier número de pointcut, ClassFilter y MethodMatcher.
  • 53. 53 Introductions  Introductions son advice que afectan en el ámbito de clase, permitiendo añadir métodos y atributos nuevos en la clase.  Permite los mismos beneficios que la herencia múltiple.  IntroductionMethodInterceptor es un subinterfaz de MethodInterceptor añadiendo un método adicional:  boolean implementsInterface(Class intf);  Si el método implementsInterface devuelve “true” entonces IntroductionMethodInterceptor es responsable de implementar el mencionado interfaz. Cualquier invocación de un método declarado en el interfaz será delegado al método invoke() de IntroductionMethodInterceptor  CUIDADO al llamar una clase con introduction fuera de Spring!!!
  • 55. 55 Autoproxying  Cuando el número de objetos proxy es pequeño con ProxyFactorybean es suficiente. En el caso de aumentar el tamaño de objetos proxy es necesario que el contenedor los cree de manera explícita.  Tipos:  BeanNameAutoProxyCreator: Mediante una expresión podemos identificar el conjunto de beans dentro de la factoría que se quiere interceptar con un determinado advice  DefaultAdvisorAutoProxyCreator: Sólo trabaja con advisor (ya que necesita saber a qué beans debería aplicar el aspecto  Similar a un BeanPostProcessor este bean peina el contexto en la búsqueda de Advisor.
  • 58. 58 Metadata autoproxying  Es posible que el proceso de autoproxy se base en metadatos (atributos a nivel de fuente). Ejemplo: Transacción declarativa

Notas del editor

  1. &amp;lt;number&amp;gt;
  2. Spring no soporta advice a nivel de atributo porque bajo su entender viola el concepto de encapsulación
  3. En el caso que el pointcut sea de tipo estático normalmente los métodos del interfaz MethodMatcher se llaman una única vez (cuando el proxy AOP es creado). Los pointcuts dinámicos se tienen que evaluar en cada invocación al método. Por tanto añaden overhead. NO SE ACONSEJA EL ABUSO DE ESTE TIPO DE POINTCUTS.
  4. Comentar el problema de obtener objetos con introduction fuera de Spring  Solución crear una factoría de ese tipo de Beans que ataque al BeanFactory de Spring.