Spring es un framework de código abierto que facilita el desarrollo de aplicaciones Java mediante la Inversión de Control (IoC) y la Programación Orientada a Aspectos (AOP). IoC permite definir las dependencias entre los componentes de una aplicación de forma declarativa en lugar de mediante código. Spring proporciona dos contenedores principales, BeanFactory y ApplicationContext, que gestionan el ciclo de vida de los objetos y resuelven sus dependencias de acuerdo a la configuración XML.
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesAlejandro Bolaños Ussa
En este seminario, se expondrán herramientas de desarrollo utilizadas a nivel empresarial, utilizando herramientas de alta calidad permitiendo el trabajo multicapa. Esta presentación fue socialzada en la universidad colegio mayor del cauca, para los estudiantes de ingeniería y desarrollo de software
Una breve introducción a la plataforma Java EE como primera parte, y a continuación una descripción de los conceptos básicos de computación en la nube, explorando términos como IaaS, SaaS y PaaS y su relación con Java EE.
Presentación que sirvió de soporte a la charla sobre Java Enterprise Edition que ofrecí dentro del evento Betabeers, celebrado en Algeciras (Cádiz) el día 27 de marzo de 2014.
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesAlejandro Bolaños Ussa
En este seminario, se expondrán herramientas de desarrollo utilizadas a nivel empresarial, utilizando herramientas de alta calidad permitiendo el trabajo multicapa. Esta presentación fue socialzada en la universidad colegio mayor del cauca, para los estudiantes de ingeniería y desarrollo de software
Una breve introducción a la plataforma Java EE como primera parte, y a continuación una descripción de los conceptos básicos de computación en la nube, explorando términos como IaaS, SaaS y PaaS y su relación con Java EE.
Presentación que sirvió de soporte a la charla sobre Java Enterprise Edition que ofrecí dentro del evento Betabeers, celebrado en Algeciras (Cádiz) el día 27 de marzo de 2014.
Presentación realizada en 2008 a un auditorio de jefes de proyecto y técnicos sin conocimientos de Java, con el fin de introducir conceptos básicos del desarrollo sobre una plataforma J2EE y algunas cuestiones concretas sobre BEA WebLogic.
Presentación sobre una Introducción a Spring Framework, explicando los conceptos básicos, módulos, y características principales que ofrece Spring Framework.
Diapositivas que elaboré para impartir el Master en J2EE. Módulo Spring Framework
CAPITULO 1: INTRODUCCION A SPRING FRAMEWORK
1.Introducción
1.1.Arquitectura
1.2.Entorno de desarrollo
CAPITULO 2: CONTENEDOR DE SPRING
2.1. INTRODUCCIÓN
2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN
2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN
2.3.1. BeanFactory
2.3.2. ApplicationContext
2.3.2.1. Inicializar el contenedor de Beans
2.3.3. Definición de Bean
2.4 Ejemplo IOC e ID con Struts
CAPÍTULO 3-INTEGRACIÓN CON BD.
3.1 Patrón DAO
3.2 Soporte de Spring para JDBC
3.3 DataSource
3.4 Utilización de JDBC con Spring.
CAPITULO 4: PROGRAMACIÓN ORIENTADA A ASPECTOS AOP
4.1 Tipos de advice
4.2 Ejemplo After Returning
4.3 Implementación del ADVICE
4.4 Definición del Advice en ApplicationContext
4.5 Definición del PointCut
4.6 Implementaciones de la intercepción de metodos
4.7 Definir el bean que utilizará el proxy
4.8 Prueba de ejecución
Spring Framework v3
Entender las ventajas que supone el uso de Spring en un proyecto de desarrollo SW
Aprender a configurar las distintas clases Java según el patrón IOC y AOP
Conocer los fundamentos de desarrollo Web con Spring MVC
Webinar "eMail Marketing en eCommerce: El desafío del Retail" eCommerce Institute
Diapositivas presentadas por Julian Drault, Director emBlue Email Marketing en el Webinar "eMail Mareting en eCommerce: El desafío del Retail" realizado el 26 de Mayo de 2016.
Presentación realizada en 2008 a un auditorio de jefes de proyecto y técnicos sin conocimientos de Java, con el fin de introducir conceptos básicos del desarrollo sobre una plataforma J2EE y algunas cuestiones concretas sobre BEA WebLogic.
Presentación sobre una Introducción a Spring Framework, explicando los conceptos básicos, módulos, y características principales que ofrece Spring Framework.
Diapositivas que elaboré para impartir el Master en J2EE. Módulo Spring Framework
CAPITULO 1: INTRODUCCION A SPRING FRAMEWORK
1.Introducción
1.1.Arquitectura
1.2.Entorno de desarrollo
CAPITULO 2: CONTENEDOR DE SPRING
2.1. INTRODUCCIÓN
2.2. DEFINICIÓN DE DEPENDENCIA DE INYECCIÓN
2.3. LA FACTORÍA DE BEANS Y EL CONTEXTO DE LA APLICACIÓN
2.3.1. BeanFactory
2.3.2. ApplicationContext
2.3.2.1. Inicializar el contenedor de Beans
2.3.3. Definición de Bean
2.4 Ejemplo IOC e ID con Struts
CAPÍTULO 3-INTEGRACIÓN CON BD.
3.1 Patrón DAO
3.2 Soporte de Spring para JDBC
3.3 DataSource
3.4 Utilización de JDBC con Spring.
CAPITULO 4: PROGRAMACIÓN ORIENTADA A ASPECTOS AOP
4.1 Tipos de advice
4.2 Ejemplo After Returning
4.3 Implementación del ADVICE
4.4 Definición del Advice en ApplicationContext
4.5 Definición del PointCut
4.6 Implementaciones de la intercepción de metodos
4.7 Definir el bean que utilizará el proxy
4.8 Prueba de ejecución
Spring Framework v3
Entender las ventajas que supone el uso de Spring en un proyecto de desarrollo SW
Aprender a configurar las distintas clases Java según el patrón IOC y AOP
Conocer los fundamentos de desarrollo Web con Spring MVC
Webinar "eMail Marketing en eCommerce: El desafío del Retail" eCommerce Institute
Diapositivas presentadas por Julian Drault, Director emBlue Email Marketing en el Webinar "eMail Mareting en eCommerce: El desafío del Retail" realizado el 26 de Mayo de 2016.
Casos reales de Native Advertising en medios españoles: el Huffington Post. B...NativeAD
Ejemplos de campañas de publicidad nativa que ha llevado a cabo la edición española del Huffington Post en distintos formatos: post patrocinado, noticia patrocinada, brand page...
Seminario Spring Roo. Monitorización con Spring InsightParadigma Digital
Seminario sobre Spring Roo y monitorización con Spring Insight organizado por Paradigma Tecnologico y Javahispano, impartido en Madrid el 14 de octubre de 2010 por Federico Caro
Oracle Application Development Framework (ADF) es una
herramienta de desarrollo basada en Java (al igual que forms es una herramienta basada en PL / SQL) diseñado para sacar el máximo provecho de Java Enterprise Edition o Java EE.
En esta presentación vamos a explorar de forma resumida la arquitectura de ADF Framework, con el objetivo de entender los conceptos fundamentales que lo adornan.
Diapositivas Curso Java J2EE, módulo:
MODULO VI: APLICACIONES WEB CON JAKARTA STRUTS
- Introducción y arquitectura
• FrameWork
• Patrón MVC
• Instalación - Primer programa
• Control de flujo
• Diagrama Clases
• Atención de la petición
- Integración con la capa de datos
• Persistencia,
• JDBC
• Patrón DAO
• Hibernate
- Manejo de Formularios
• Form Beans
• Validación en formulario
- Validación de Formularios
• Framework Validator
• Validación JavaScript
- Tratamiento de Excepciones
• Excepciones Globales
- Internacionalización
- Composición de vistas
• Plantillas
• Tiles
- Biblioteca de etiquetas
• HTML
• BEAN
• LOGIC
Cinco características que hacen que Spring sea popular en todo el mundo. Para servicios personalizados de desarrollo e integración de software Spring, comuníquese con Chetu. Para saber más, visite: https://www.chetu.com/es/spring.php
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
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
&lt;number&gt;
Spring no soporta advice a nivel de atributo porque bajo su entender viola el concepto de encapsulación
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.
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.