Spring Boot
Sesión 4
- SpEL – DI
Spring Expression Language SpEL
• Lenguaje de expresiones
• Permite consulta y manipulación de objetos en tiempo de ejecución,
y otras características como la invocación de métodos
• SpringSource Tool Suite provee soporte para SpEL
Utilización de SpEL
• De forma nativa en una aplicación Spring
• archivos XML
• anotaciones
Utilización de SpEL
• A través de un parser, creando explicitamente toda la infraestructura
necesaria para interpretarlo
Expresiones SpEL
• Literal
• #{15.95}
• #{‘Hola en SpEL’}
• #{5>9}
• Acceso a propiedades
• #{[Link]}
• #{usuario}
• Desde la versión 3.0, Spring ofrece un lenguaje dinámico
llamado Spring Expression Language (Lenguaje de expresiones Spring,
a partir de ahora SpEL). SpEL permite la consulta y manipulación de
objetos en tiempo real (de manera similar a Expression Language en
JSP/JSF) además de otras interesantes características como la
invocación de metodos. SpringSource Tool Suite (una variación de
Eclipse altamente customizada para trabajar con Spring) provee
soporte para SpEL, permitiendo autocompletado de expresiones
además de otras caracteristicas realmente útiles para trabajar con el
lenguaje.
SpEL - Operadores
SpelExpressionParser
• Clase SpelExpressionParser
• Permite evaluar expresiones sin iniciar el contexto de Spring
framework
• El método Expression parseExpression(String expression) recibe como
parámetro una expresión de spring y devuelve un objeto de tipo Expression.
• La clase Expression contiene un método llamado Object getValue() el cuál
devuelve el resultado de la expresión.
Uso clase SpelExpressionParser
Uso de Strings en Spel
Spel –
Operadores
aritméticos
Spel –
Operadores
relacionales
Spel –
Operadores
lógicos
Spel –
Operadores
Condicional
Spel –
Expresiones
Regulares
Prueba a cambiar a private las
variables de la clase Usuario
Inyección de dependencias
• Patrón de desarrollo de software
• Los objetos NO se encargan de inicialiar sus propias depedencias
• Son provistas a través de otro objeto
• Contenedor IoC
• Spring-core
• Spring-beans
Maven
• Uso de contenedor IoC y DI
• Dependencias necesarias
Tipos de inyección de dependencias
• El contenedor IoC de Spring soporta las variantes de DI:
• Constructor
• El contenedor se encarga de invocar el constructor de la clases pasando los argumentos
como dependencias
• Es la opción recomendada
• Setter
• El contenedor asigna las dependencias usando los métodos setter de los atributos.
• Recomendada para dependencias opcionales.
• Field
• No se necesita un método para la asignación de la dependencia
• Se asigna a través del API
• Se usa para casos muy básicos y generalmente no recomendada.
Configuración
• XML
• JavaConfig con anotaciones
Configuración con XML
• Archivo [Link] de la carpeta resources
• Definidos dos beans
• dataSource
• propiedades de conexión a base de datos
• Se inicializan con el contenedor IoC
• dataBaseService
• Utillizando el dataSource gestiona la base de datos (CRUD)
Inyección
• La inyección de los atributos del dataSource son inicializadas a través
de setter-inyección con la etiqueta property
• la inyección del dataSource a través del constructor en la
clase dataBaseService se hace con la etiqueta constructor-arg.
• La inyección de tipo field no es compatible con la configuración XML y
requiere el uso de anotaciones.
JavaConfig
• La configuración usando JavaConfig requiere el uso de anotaciones
especificas del framework.
• @Configuration
• @ComponentScan
• @Bean
Utilización
• Los beans creado se utilizan a través de anotaciones
• Spring
• JSR-300
Anotaciones Spring
• Anotaciones especificas para declaración de beans
como @Component, @Service, @Repository
• Anotaciones para inyección @Autowire
• clase DatabaseService inicializa la dependencia dataSource a través
del constructor
• la dependencia auditService a través del setter
Anotaciones JSR 330
• @Inject para inyección de componentes
• @Named para declaración de beans.
• @Inject
• @Component