Commit 17d90c9b authored by agarca4's avatar agarca4
Browse files

clase 9, @Autowired

parent 7538f861
package es.mde;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import es.mde.restaurante.entidades.Carne;
import es.mde.restaurante.entidades.Comida;
import es.mde.restaurante.entidades.Pedido;
import es.mde.restaurante.entidades.TipoCarne;
@Configuration
public class ConfiguracionPorJava {
......@@ -14,12 +17,26 @@ public class ConfiguracionPorJava {
String idiomaPedido;
@Bean
public Pedido getPedido(@Value("${restaurante-casa-porras.pedidoMinimo}") Double pedidoMinimo) {
public Pedido getPedido() {
Pedido pedido = new Pedido();
pedido.setPedidoMinimo(pedidoMinimo);
pedido.setIdioma(idiomaPedido);
return pedido;
}
@Bean("comida1")
@Primary
public Comida getComida() {
Carne carne = new Carne("Soy la COMIDA INYECTADA", 50.0, TipoCarne.CERDO_IBERICO, 500.0, 1800.00);
System.out.println("Creando bean Comida1");
return carne;
}
@Bean("comida2")
public Comida getComida2() {
Carne carne = new Carne("Soy la COMIDA INYECTADA 2", 100.0, TipoCarne.CORDERO_LECHAL, 250.0, 1200.00);
System.out.println("Creando bean Comida2");
return carne;
}
}
package es.mde;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
......@@ -13,27 +15,17 @@ import es.mde.restaurante.entidades.Pedido;
@Import({ ConfiguracionPorJava.class })
public class RestauranteCasaPorrasApplication {
/*
* esta es la que usa springboot por defecto, usamos la interface Logger con la
* implentacion slf4j, pero podemos usar otra implementación. Estamos usando el
* patrón de diseño FACHADA
*/
private static final Logger log = LoggerFactory.getLogger(RestauranteCasaPorrasApplication.class);
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(RestauranteCasaPorrasApplication.class, args);
Pedido beanPedido = context.getBean(Pedido.class);
/* este es el orden de peioridad que ofrece */
log.error(beanPedido.toString());
log.warn(beanPedido.toString());
log.info(beanPedido.toString());
/* por defecto, de aquí para abajo no los mostrará, hara un filtro */
log.debug(beanPedido.toString());
log.trace(beanPedido.toString());
/* veamos las configuraciones en el properties */
Pedido pedido = context.getBean(Pedido.class);
log.error(pedido.getComida().toString());
log.warn(pedido.toString());
context.close();
......
......@@ -6,6 +6,8 @@ public class Carne extends Comida {
private Double gramosRacion;
private Double caloriasRacion;
public Carne(String nombreEnLaCarta, Double precio, TipoCarne tipoCarne, Double gramosRacion,
Double caloriasRacion) {
super(nombreEnLaCarta, precio);
......
......@@ -5,6 +5,8 @@ public abstract class Comida {
private String nombreEnLaCarta;
private Double precioRacion;
public Comida(String nombreEnLaCarta, Double precio) {
super();
this.nombreEnLaCarta = nombreEnLaCarta;
......@@ -27,4 +29,11 @@ public abstract class Comida {
this.precioRacion = precio;
}
@Override
public String toString() {
return "Comida [nombreEnLaCarta=" + nombreEnLaCarta + ", precioRacion=" + precioRacion + "]";
}
}
......@@ -3,6 +3,19 @@ package es.mde.restaurante.entidades;
import java.time.Instant;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@Component
@Primary
/*
* Al colocar el @Component, Spring ya va a crear un bean de tipo Pedido, pero
* como en la clase ConfiguracionPorJava tengo otro bean de la clase Pedido, al
* recuperar un bean de este tipo, Spring peta xq no sabe cual quieres.
* Colocando aquí @Primary, le decimos que queremos que el bean salga de aqui.
*/
public class Pedido {
private Instant fechaPedido;
......@@ -10,11 +23,28 @@ public class Pedido {
private Double importePedido;
private Double pedidoMinimo;
private String idioma;
// este campo solo es para ver como funciona el autowired
private Comida comida;
public Pedido() {
super();
}
/*
* Le decimos a Spring que al crear el Bean Pedido, cree tb el Bean comida. Al
* hacerlo en el constructor estamos indicando que el campo comida es
* imprescindible. De hecho, si comentamos el bean comida, no nos va a dejar
* hacer un bean pedido. Ademas si tengo varios constructores, construirá el
* bean con el que esté anotado con el @Autowired. Si hay varios marcados, usará
* el que mas campos pueda satisfacer. Si tuvieramos varios bean del tipo
* comida, con @Qualifier y el nombre del bean concreto le decimos cual usar
*/
@Autowired
public Pedido(/*@Qualifier("comida2")*/ Comida comida) {
System.out.println("Estoy inyectando el bean de tipo comida al crear el bean pedido");
this.comida = comida;
}
public Pedido(Collection<Comida> contenidoPedido, Double importePedido) {
super();
this.fechaPedido = Instant.now();
......@@ -68,4 +98,18 @@ public class Pedido {
+ importePedido + ", pedidoMinimo=" + pedidoMinimo + ", idioma=" + idioma + "]";
}
// solo para ver como funciona el autowired
public Comida getComida() {
return comida;
}
/*
* Aquí conseguimos que despues de crearse el bean con el constructor, le
* resetee ese campo con este setter
*/
// @Autowired
// public void setComida(@Qualifier("comida2")Comida comida) {
// this.comida = comida;
// }
}
restaurante-casa-porras.idioma=ingles
restaurante-casa-porras.pedidoMinimo=50.00
# Con esto indicamos al log que solo presente los log WARN y superior
# logging.level.root=WARN
# Podemos decirle desde donde, no le decimos desde root
# logging.level.root=DEBUG
# logging.level.es.med=DEBUG
#agregamos mas configuraciones:
#logging.file.name=logs/RestauranteCasaPorras.log
#logging.pattern.dateformat=yyyy-MM-dd HH:mm
#porras.formatofecha=%date{ddMMM HH:mm:ss, UTC}Z
#logging.pattern.console=${porras.formatofecha} [%thread %clr(${PID:- })] %-5level %logger{15} => %msg %n
logging.file.name=logs/RestauranteCasaPorras.log
logging.pattern.dateformat=yyyy-MM-dd HH:mm
porras.formatofecha=%date{ddMMM HH:mm:ss, UTC}Z
logging.pattern.console=${porras.formatofecha} [%thread %clr(${PID:- })] %-5level %logger{15} => %msg %n
#logging.pattern.console=${porras.formatofecha} [%thread %clr(${PID:- })] %highlight(%-5level) %cyan(%logger{15}) => %msg %n
# Documentacion: https://logback.qos.ch/manual/layouts.html
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment