lunes, 11 de enero de 2021

INTRODUCTION TO SPRING BOOT IN 10 STEPS, spring boot crack 1.0

 INTRODUCTION TO SPRING BOOT IN 10 STEPS

https://github.com/in28minutes/spring-web-services/tree/master/springboot-in-10-steps

https://github.com/in28minutes/spring-web-services

First 10 Steps in Spring Boot

  • Step 1 : Introduction to Spring Boot - Goals and Important Features
  • Step 2 : Developing Spring Applications before Spring Boot
  • Step 3 : Using Spring Initializr to create a Spring Boot Application
  • Step 4 : Creating a Simple REST Controller
  • Step 5 : What is Spring Boot Auto Configuration?
  • Step 6 : Spring Boot vs Spring vs Spring MVC
  • Step 7 : Spring Boot Starter Projects - Starter Web and Starter JPA
  • Step 8 : Overview of different Spring Boot Starter Projects
  • Step 9 : Spring Boot Actuator
  • Step 10 : Spring Boot Developer Tools
  • Spring Boot - Conclusion

Complete Code Example



decide Spring WEB, jacksonDatabind binding, validation, JSTL, LOG4J, 

STARTUP PROJECT,

WEB STARTER







spring boot se hara cargo del code plumbing, y nos permitira enfocarnos en la logica de negocio unicamente

spring boot initializer



para empezar a travajar con REST se necesita habilitar WEB como dependencia 


Vamos a crear una clase simple Libro, Book,  con un constructor, y getters and setters 

Registering beans for JMX exposure on startup
2021-01-17 09:17:27.403  INFO 3760 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''



Ahora vamos a generar el controller, 
@RestController  annotation para definir el controller, vamos a generar un simple RestService
@GetMap  mapping the URl GET Method en ("/books")
List of books back


will handle the get request to specific URL


entonces el proyecto esta en spring-boot- in 10 steps

creamos la clase Libro, constructor, y override en el metodo toString()




getId(), GetName(), getAuthor()



creamos la clase BookController

Definimos que es un Rest controller con 

@RestController
@GetMapping, para manejar las peticiones tipo GET a la liga
http://localhost:8080/books



Ejecucion de la applicacion




salida



SPRING BOOT, 

SPRING, 

SPRING MVC,


THE MOST IMPORTANT FEAUTRE UIS DEPENDECNY INJECTION IOC, SPRING TAKE CONTROL OF ALL THE BEANS AND THEIR DEPENDENCIES,

DEFINE BEANS, @COMPONENT @service, y cosas asi y tambien definir las dependencias con @autowired, y cosas asi y definir como encontrar los beans @componetscan for example, 

solve the problem of dependecny injection, create loosing coupled application, easily unit testing


tambien spring tiene muy buena integracion con otros frameworks, 

MONITORING FEATURES, STARTER ACTUATOR, 


STARTERS
SPRINGBOOT STARTER WEB, 



ENTONCES EN LAS STARTER TENEMOS POR EJEMPLO TOMCAT,  TAMBIEN POR EJEMPLO TENEMOS POR DEFAULT JSON, MVC,  Y VARIAS MAS
JACKSON HANDLE ALL JSON STUFF











SPRING BOOT STARTER

CUANDO AGREGO SPRING BOOT STARTED WEB AGREGO TODAS ESTAS DEPENDENCIAS, 


CUANDO INVOCAMOS RESTFULL WEB SERVICES LA CONVERSION A JSON APARECE AUTOMATICAMENTE,  Y SE HACE MEDIANTE STARTER JSON,  JPA, HIBERNATE, orm OBJECT RELATIONAL MAPPING,

EN STARTE WEB TENEMOS UN CONJUNTO DE DEPENDENCIAS QUE HAN SIDO DEFINIDAS,  Y ESTAS DEPENDENCIAS SON PROVEIDAS AUTOMATICAMENTE A NUESTRO PROYECTO


VOY AL POM

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

CLICK CTRL EN 


ON OF THE MOST POPULAR FRAMEWORK TO BUILD MICROSERVICES

STARTER WEB CONTAINS A DEPENDENCY ON TOMCAT , THAT'S THE REASON THAT THE APPLICATION AUTOMATICALLY LAUNCH TOMCAT


SET OF DEPENDENCIE DEFINED, AND THESE DEPENDENCIES ARE AUTOMATICALLY PROVIDED TO OUR PROJECT

SPRING BOOT STARTER IS A DEPENDENCY OF SPRING BOOT STARTER WEB, 

UNA VEZ QUE NOS DE TODAS LAS DEPENDENCIAS, NOS PERMITE USAR DE MANERA AUTOMATICAMENTE TODAS ESTA DEPENDENCIAS, 

SPRING BOOT STARTER TEST PARA HACER UNIT TESTIONG

JPA IMPORTANT TAMBIEN INTERFACE FOR HIBERNATE, HOW ORM APPLICATION , ORM FRAMEWORK WORKS, OBJECT RELATIONAL MAPPING





















starter web service, soap services  , tambien para WEB and Restfull applications
starter TEST - para unit testing.
siempre que tengamos un problema hay que revisar si un starter nos puede ayudar a  resolverlo




ACTUATOR

para agregar los  starters simplemente copiamos  el starter web tag  y lo pegamos y cambiamos la terminacion a actuator

como se ve al agregar e el pom configuramos nuevamente nuestra aplicacion lo que ya se saba con anterioridad, confirmando que es lo correcto
no s ayuda a gregar monitoreo a la aplicacion, lee mucho metadata, como se ha hecho la autoconfiguracion, how many times specif service has fail, or has called, etc.



exposes a lot of rest services, 

{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}


health
{
"status": "UP"
}

nos iindica up and runnig
++++++++++++++++++++

para empezar a usar mas contenido hay que configurar en properties

management.endpoints.web.exposure.include =*

y ahora si nos indica mas detalles
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"auditevents": {
"href": "http://localhost:8080/actuator/auditevents",
"templated": false
},
"beans": {
"href": "http://localhost:8080/actuator/beans",
"templated": false
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"conditions": {
"href": "http://localhost:8080/actuator/conditions",
"templated": false
},
"configprops": {
"href": "http://localhost:8080/actuator/configprops",
"templated": false
},
"env": {
"href": "http://localhost:8080/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://localhost:8080/actuator/env/{toMatch}",
"templated": true
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
},
"loggers-name": {
"href": "http://localhost:8080/actuator/loggers/{name}",
"templated": true
},
"loggers": {
"href": "http://localhost:8080/actuator/loggers",
"templated": false
},
"heapdump": {
"href": "http://localhost:8080/actuator/heapdump",
"templated": false
},
"threaddump": {
"href": "http://localhost:8080/actuator/threaddump",
"templated": false
},
"metrics": {
"href": "http://localhost:8080/actuator/metrics",
"templated": false
},
"metrics-requiredMetricName": {
"href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
"templated": true
},
"scheduledtasks": {
"href": "http://localhost:8080/actuator/scheduledtasks",
"templated": false
},
"httptrace": {
"href": "http://localhost:8080/actuator/httptrace",
"templated": false
},
"mappings": {
"href": "http://localhost:8080/actuator/mappings",
"templated": false
}
}
}



entonces al agregar la dependencia
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>

vemos que se habilita el HAL BROWSER CONSOLE





to browse in the actuator




podemos ver todos lo beans que se habilitan o que maneja el contenedor de beans de nuestra aplicacion


HACER LA PRACTICA CON LA APLICACION ANTERIOR NOTA


TAREAS


http://localhost:8080/actuator/metrics/jvm.memory.used


OTRA IMPORTANTE ES METRICS
]

DONDE NOS INDICA LAS METRICAS QUE VAMOS A PODER UTILIZAR EN NUESTRA APLICACION





{
  "names": [
    "jvm.buffer.memory.used",
    "jvm.memory.used",
    "jvm.gc.memory.allocated",
    "http.server.requests",
    "jvm.memory.committed",
    "tomcat.sessions.created",
    "tomcat.sessions.expired",
    "tomcat.global.request.max",
    "tomcat.global.error",
    "jvm.gc.max.data.size",
    "logback.events",
    "system.cpu.count",
    "jvm.memory.max",
    "jvm.buffer.total.capacity",
    "jvm.buffer.count",
    "jvm.threads.daemon",
    "process.start.time",
    "tomcat.global.sent",
    "tomcat.sessions.active.max",
    "tomcat.threads.config.max",
    "jvm.gc.live.data.size",
    "process.cpu.usage",
    "tomcat.servlet.request",
    "jvm.gc.pause",
    "process.uptime",
    "tomcat.global.received",
    "tomcat.cache.hit",
    "tomcat.servlet.error",
    "tomcat.servlet.request.max",
    "tomcat.cache.access",
    "tomcat.threads.busy",
    "tomcat.sessions.active.current",
    "system.cpu.usage",
    "jvm.threads.live",
    "jvm.classes.loaded",
    "jvm.classes.unloaded",
    "jvm.threads.peak",
    "tomcat.threads.current",
    "tomcat.global.request",
    "jvm.gc.memory.promoted",
    "tomcat.sessions.rejected",
    "tomcat.sessions.alive.max"
  ]
}



RESPONSE 200 OK STATUS

{
  "name": "jvm.memory.used",
  "measurements": [{
      "statistic": "VALUE",
      "value": 142501040
    }],
  "availableTags": [{
      "tag": "area",
      "values": ["heap", "nonheap"]
    }, {
      "tag": "id",
      "values": ["Compressed Class Space", "PS Old Gen", "PS Survivor Space", "Metaspace", "PS Eden Space", "Code Cache"]
    }]
}




HTTP TRACE. IT SHOW ALL THE REQUEST EXECUTED
TOIDOS LOS DETALLES DE LOS REQUEST EJECUTADOS, LOS TRACING TIENEN COSTO EN MEMORIA

,MAPPING ALL THE DIFFERENT THINGS MPPED TO URL

\





UNA DE LAS DEVELOPER TOOLS FAVORITAS QUE SE DEBE USAR PARA NO TENER QUE ESTAR REINICIANDO LA APLICACION CADA VEZ QUE SE HAGA CAMBIOS

MY FAVORITE FEATURE

HOW TO MKE ALL THING BE LOADED AUTOMATICLLY ASSOON AS I MAKE CODE CHANGE

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>







********************




{
  "contexts": {
    "application": {
      "beans": {
        "endpointCachingOperationInvokerAdvisor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
          "dependencies": [
            "environment"
          ]
        },
        "defaultServletHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration$$EnhancerBySpringCGLIB$$8bd808aa",
          "resource": null,
          "dependencies": [
            "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties"
          ]
        },
        "backendIdConverterRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.plugin.core.OrderAwarePluginRegistry",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "pagedResourcesAssembler": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.web.PagedResourcesAssembler",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "pageableResolver"
          ]
        },
        "metricsRestTemplateCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.metrics.web.client.MetricsRestTemplateCustomizer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsAutoConfiguration.class]",
          "dependencies": [
            "simpleMeterRegistry",
            "restTemplateTagConfigurer",
            "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties"
          ]
        },
        "persistenceExceptionTranslationPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor",
          "resource": "class path resource [org/springframework/boot/autoconfigure/dao/PersistenceExceptionTranslationAutoConfiguration.class]",
          "dependencies": [
            "environment"
          ]
        },
        "org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration$$EnhancerBySpringCGLIB$$deb04f30",
          "resource": null,
          "dependencies": []
        },
        "characterEncodingFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.filter.OrderedCharacterEncodingFilter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguration.class]",
          "dependencies": []
        },
        "management.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "webEndpointDiscoverer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointDiscoverer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": [
            "endpointOperationParameterMapper",
            "endpointMediaTypes",
            "webEndpointPathMapper"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration$$EnhancerBySpringCGLIB$$4ef23ae",
          "resource": null,
          "dependencies": [
            "spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration$$EnhancerBySpringCGLIB$$74b1096f",
          "resource": null,
          "dependencies": [
            "server-org.springframework.boot.autoconfigure.web.ServerProperties",
            "spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties"
          ]
        },
        "backendIdHandlerMethodArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.BackendIdHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "backendIdConverterRegistry",
            "resourceMetadataHandlerMethodArgumentResolver",
            "baseUri"
          ]
        },
        "preserveErrorControllerTargetClassPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$PreserveErrorControllerTargetClassPostProcessor",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class]",
          "dependencies": []
        },
        "entityLinksPluginRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.plugin.core.OrderAwarePluginRegistry",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration$$EnhancerBySpringCGLIB$$d08a26a9",
          "resource": null,
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "logbackMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.logging.LogbackMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$MeterBindersConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$542282ea",
          "resource": null,
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "webEndpointPathMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.MappingWebEndpointPathMapper",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$df011f4b",
          "resource": null,
          "dependencies": []
        },
        "repositoryController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositoryController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/RepositoryController.class]",
          "dependencies": [
            "pagedResourcesAssembler",
            "repositories",
            "delegatingEntityLinks",
            "resourceMappings"
          ]
        },
        "restHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "resourceMappings",
            "repositories",
            "jpaHelper"
          ]
        },
        "org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$$EnhancerBySpringCGLIB$$571de009",
          "resource": null,
          "dependencies": []
        },
        "propertySourcesPlaceholderConfigurer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.context.support.PropertySourcesPlaceholderConfigurer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/context/PropertyPlaceholderAutoConfiguration.class]",
          "dependencies": []
        },
        "faviconRequestHandler": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.resource.ResourceHttpRequestHandler",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration",
          "resource": null,
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "management.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties"
          ]
        },
        "jmxMBeanExporter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.jmx.JmxEndpointExporter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.class]",
          "dependencies": [
            "mbeanServer",
            "jmxAnnotationEndpointDiscoverer"
          ]
        },
        "beanNameViewResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.view.BeanNameViewResolver",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]",
          "dependencies": []
        },
        "spring.security-org.springframework.boot.autoconfigure.security.SecurityProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.security.SecurityProperties",
          "resource": null,
          "dependencies": []
        },
        "validatingRepositoryEventListener": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.event.ValidatingRepositoryEventListener",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration$$EnhancerBySpringCGLIB$$937beb5a",
          "resource": null,
          "dependencies": []
        },
        "viewResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.view.ContentNegotiatingViewResolver",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]",
          "dependencies": [
            "org.springframework.beans.factory.support.DefaultListableBeanFactory@7eb91bef"
          ]
        },
        "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "methodValidationPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.validation.beanvalidation.MethodValidationPostProcessor",
          "resource": "class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]",
          "dependencies": [
            "environment"
          ]
        },
        "objectMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.fasterxml.jackson.databind.ObjectMapper",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "persistentEntities",
            "defaultConversionService",
            "repositoryInvokerFactory",
            "repositories",
            "associationLinks",
            "excerptProjector",
            "linkCollector",
            "resourceProcessorInvoker"
          ]
        },
        "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$LiveReloadConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$LiveReloadConfiguration$$EnhancerBySpringCGLIB$$8d92d171",
          "resource": null,
          "dependencies": [
            "spring.devtools-org.springframework.boot.devtools.autoconfigure.DevToolsProperties"
          ]
        },
        "stringHttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.http.converter.StringHttpMessageConverter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration",
          "resource": null,
          "dependencies": []
        },
        "tomcatServletWebServerFactoryCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryAutoConfiguration.class]",
          "dependencies": [
            "server-org.springframework.boot.autoconfigure.web.ServerProperties"
          ]
        },
        "repositorySearchController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositorySearchController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/RepositorySearchController.class]",
          "dependencies": [
            "pagedResourcesAssembler",
            "entityLinks",
            "resourceMappings",
            "httpHeadersPreparer"
          ]
        },
        "server-org.springframework.boot.autoconfigure.web.ServerProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.ServerProperties",
          "resource": null,
          "dependencies": []
        },
        "repositoryExporterHandlerAdapter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositoryRestHandlerAdapter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "defaultConversionService",
            "persistentEntities",
            "selfLinkProvider",
            "repositoryRestConfiguration",
            "associationLinks",
            "pageableResolver",
            "objectMapper",
            "repositories",
            "resourceMappings",
            "baseUri",
            "sortResolver",
            "serverHttpRequestMethodArgumentResolver",
            "repoRequestArgumentResolver",
            "persistentEntityArgumentResolver",
            "resourceMetadataHandlerMethodArgumentResolver",
            "backendIdHandlerMethodArgumentResolver",
            "eTagArgumentResolver",
            "resourceProcessorInvoker",
            "defaultMessageConverters",
            "alpsJsonHttpMessageConverter"
          ]
        },
        "messageConverters": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.HttpMessageConverters",
          "resource": "class path resource [org/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration.class]",
          "dependencies": []
        },
        "jsonComponentModule": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.jackson.JsonComponentModule",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.class]",
          "dependencies": []
        },
        "alpsController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.alps.AlpsController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/alps/AlpsController.class]",
          "dependencies": [
            "repositoryRestConfiguration"
          ]
        },
        "jmxAnnotationEndpointDiscoverer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointDiscoverer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.class]",
          "dependencies": [
            "endpointOperationParameterMapper"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration$SpringMvcConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration$SpringMvcConfiguration$$EnhancerBySpringCGLIB$$36902e85",
          "resource": null,
          "dependencies": []
        },
        "domainObjectMerger": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.support.DomainObjectMerger",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "defaultConversionService"
          ]
        },
        "repositoryRestExceptionHandler": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositoryRestExceptionHandler",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$$EnhancerBySpringCGLIB$$d811e4e1",
          "resource": null,
          "dependencies": []
        },
        "mappingJackson2HttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/http/JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration.class]",
          "dependencies": [
            "jacksonObjectMapper"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$cee837af",
          "resource": null,
          "dependencies": [
            "management.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties"
          ]
        },
        "healthAggregator": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.health.OrderedHealthAggregator",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$da97d56",
          "resource": null,
          "dependencies": []
        },
        "meterRegistryPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "contextCapturingServletTomcatCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration$$Lambda$179/1458893609",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.hateoas.config.HateoasConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$422a3231",
          "resource": null,
          "dependencies": []
        },
        "mbeanExporter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.jmx.export.annotation.AnnotationMBeanExporter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class]",
          "dependencies": [
            "objectNamingStrategy"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$2366776d",
          "resource": null,
          "dependencies": []
        },
        "excerptProjector": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.DefaultExcerptProjector",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "resourceMappings"
          ]
        },
        "repositoryInvokerFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.support.UnwrappingRepositoryInvokerFactory",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "repositoryRestConfiguration"
          ]
        },
        "endpointMediaTypes": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "metadataConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.config.MetadataConfiguration",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration$$EnhancerBySpringCGLIB$$2b3b2ef7",
          "resource": null,
          "dependencies": []
        },
        "management.server-org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration$$EnhancerBySpringCGLIB$$2507c37f",
          "resource": null,
          "dependencies": []
        },
        "mbeanServer": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.sun.jmx.mbeanserver.JmxMBeanServer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class]",
          "dependencies": []
        },
        "linkCollector": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.mapping.LinkCollector",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "persistentEntities",
            "selfLinkProvider",
            "associationLinks"
          ]
        },
        "servletWebServerFactoryCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryAutoConfiguration.class]",
          "dependencies": [
            "server-org.springframework.boot.autoconfigure.web.ServerProperties"
          ]
        },
        "mvcUrlPathHelper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.util.UrlPathHelper",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration$$EnhancerBySpringCGLIB$$d64b9ea7",
          "resource": null,
          "dependencies": []
        },
        "servletMappingDescriptionProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.web.mappings.servlet.ServletsMappingDescriptionProvider",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration$ServletWebConfiguration.class]",
          "dependencies": []
        },
        "webServerFactoryCustomizerBeanPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor",
          "resource": null,
          "dependencies": []
        },
        "_relProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.core.DelegatingRelProvider",
          "resource": null,
          "dependencies": [
            "(inner bean)#4d10d5ff"
          ]
        },
        "org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$$EnhancerBySpringCGLIB$$8398ced1",
          "resource": null,
          "dependencies": []
        },
        "controllerEndpointHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.servlet.ControllerEndpointHandlerMapping",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.class]",
          "dependencies": [
            "controllerEndpointDiscoverer",
            "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties",
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "management.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$$EnhancerBySpringCGLIB$$9b26e44",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration$$EnhancerBySpringCGLIB$$8ba10c98",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration$$EnhancerBySpringCGLIB$$feb7733",
          "resource": null,
          "dependencies": [
            "spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties"
          ]
        },
        "optionalLiveReloadServer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$LiveReloadConfiguration.class]",
          "dependencies": [
            "liveReloadServer"
          ]
        },
        "springbootIn10StepsApplication": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.in28minutes.springboot.basics.springbootin10steps.SpringbootIn10StepsApplication$$EnhancerBySpringCGLIB$$cbabc87b",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$6a790418",
          "resource": null,
          "dependencies": []
        },
        "standardJacksonObjectMapperBuilderCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration$StandardJackson2ObjectMapperBuilderCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties"
          ]
        },
        "metricsEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.metrics.MetricsEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.class]",
          "dependencies": [
            "simpleMeterRegistry"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration$$EnhancerBySpringCGLIB$$e90f3773",
          "resource": null,
          "dependencies": [
            "management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$$EnhancerBySpringCGLIB$$b10c39bc",
          "resource": null,
          "dependencies": []
        },
        "uriListHttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.convert.UriListHttpMessageConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "simpleMeterRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.simple.SimpleMeterRegistry",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]",
          "dependencies": [
            "simpleConfig",
            "micrometerClock"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration$$EnhancerBySpringCGLIB$$b2630c62",
          "resource": null,
          "dependencies": []
        },
        "environmentEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.env.EnvironmentEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.class]",
          "dependencies": [
            "environment"
          ]
        },
        "jacksonCodecCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration$$Lambda$414/1943279488",
          "resource": "class path resource [org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfiguration$JacksonCodecConfiguration.class]",
          "dependencies": [
            "jacksonObjectMapper"
          ]
        },
        "conventionErrorViewResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.DefaultErrorViewResolver",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$2d97357f",
          "resource": null,
          "dependencies": [
            "org.springframework.beans.factory.support.DefaultListableBeanFactory@7eb91bef",
            "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter",
            "org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration",
          "resource": null,
          "dependencies": []
        },
        "repositories": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.repository.support.Repositories",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "halMessageConverterSupportedMediaTypeCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.hateoas.HypermediaHttpMessageConverterConfiguration$HalMessageConverterSupportedMediaTypesCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/hateoas/HypermediaHttpMessageConverterConfiguration.class]",
          "dependencies": []
        },
        "hateoasObjenesisCacheDisabler": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.HateoasObjenesisCacheDisabler",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration.class]",
          "dependencies": []
        },
        "spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties",
          "resource": null,
          "dependencies": []
        },
        "localeCharsetMappingsCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration$LocaleCharsetMappingsCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$6cd6dced",
          "resource": null,
          "dependencies": []
        },
        "configurationPropertiesReportEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "annotatedEventHandlerInvoker": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.event.AnnotatedEventHandlerInvoker",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "multipartConfigElement": {
          "aliases": [],
          "scope": "singleton",
          "type": "javax.servlet.MultipartConfigElement",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/MultipartAutoConfiguration.class]",
          "dependencies": []
        },
        "requestContextFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]",
          "dependencies": []
        },
        "defaultViewResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.view.InternalResourceViewResolver",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$JvmMeterBindersConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$JvmMeterBindersConfiguration$$EnhancerBySpringCGLIB$$364f5503",
          "resource": null,
          "dependencies": []
        },
        "serverHttpRequestMethodArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.ServerHttpRequestMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration$$EnhancerBySpringCGLIB$$2f624700",
          "resource": null,
          "dependencies": []
        },
        "jacksonObjectMapperBuilder": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.http.converter.json.Jackson2ObjectMapperBuilder",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration.class]",
          "dependencies": [
            "standardJacksonObjectMapperBuilderCustomizer"
          ]
        },
        "org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration$$EnhancerBySpringCGLIB$$c894aa10",
          "resource": null,
          "dependencies": []
        },
        "beansEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.beans.BeansEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "management.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties",
          "resource": null,
          "dependencies": [
            "environment"
          ]
        },
        "projectionDefinitionRegistrar": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.ProjectionDefinitionRegistar",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "liveReloadServer": {
          "aliases": [],
          "scope": "restart",
          "type": "org.springframework.boot.devtools.livereload.LiveReloadServer",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$LiveReloadConfiguration.class]",
          "dependencies": []
        },
        "webMvcMetricsFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.FilterRegistrationBean",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]",
          "dependencies": [
            "simpleMeterRegistry",
            "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties",
            "webMvcTagsProvider",
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "traceRepository": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceAutoConfiguration.class]",
          "dependencies": []
        },
        "pageableResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.web.HateoasPageableHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "sortResolver",
            "repositoryRestConfiguration"
          ]
        },
        "healthEndpointWebExtension": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.health.HealthEndpointWebExtension",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration$ServletWebHealthConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "healthWebEndpointResponseMapper"
          ]
        },
        "restTemplateBuilder": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.client.RestTemplateBuilder",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/client/RestTemplateAutoConfiguration.class]",
          "dependencies": []
        },
        "multipartResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.multipart.support.StandardServletMultipartResolver",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/MultipartAutoConfiguration.class]",
          "dependencies": []
        },
        "resourceMetadataHandlerMethodArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.ResourceMetadataHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "resourceMappings",
            "baseUri"
          ]
        },
        "requestMappingHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcConversionService",
            "mvcResourceUrlProvider",
            "mvcContentNegotiationManager"
          ]
        },
        "webExposeExcludePropertyEndpointFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.ExposeExcludePropertyEndpointFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "delegatingEntityLinks": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.core.DelegatingEntityLinks",
          "resource": null,
          "dependencies": [
            "controllerEntityLinks",
            "(inner bean)#74e28a2f"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$$EnhancerBySpringCGLIB$$9d1fba37",
          "resource": null,
          "dependencies": [
            "environment"
          ]
        },
        "requestMappingHandlerAdapter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcContentNegotiationManager",
            "mvcConversionService",
            "mvcValidator",
            "sortResolver",
            "pageableResolver",
            "pagedResourcesAssemblerArgumentResolver"
          ]
        },
        "restTemplateTagConfigurer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.metrics.web.client.DefaultRestTemplateExchangeTagsProvider",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsAutoConfiguration.class]",
          "dependencies": []
        },
        "jacksonHttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration$ResourceSupportHttpMessageConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "objectMapper"
          ]
        },
        "spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.transaction.TransactionProperties",
          "resource": null,
          "dependencies": []
        },
        "entityLinks": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.RepositoryEntityLinks",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "pageableResolver",
            "sortResolver",
            "repositories",
            "resourceMappings",
            "repositoryRestConfiguration",
            "backendIdConverterRegistry"
          ]
        },
        "classPathFileSystemWatcher": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.classpath.ClassPathFileSystemWatcher",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration.class]",
          "dependencies": [
            "fileSystemWatcherFactory",
            "classPathRestartStrategy"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$95fe9ba1",
          "resource": null,
          "dependencies": [
            "spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration$$EnhancerBySpringCGLIB$$33a97589",
          "resource": null,
          "dependencies": []
        },
        "mvcHandlerMappingIntrospector": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.handler.HandlerMappingIntrospector",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$bc966d88",
          "resource": null,
          "dependencies": [
            "management.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.condition.BeanTypeRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.condition.BeanTypeRegistry",
          "resource": null,
          "dependencies": []
        },
        "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.info.ProjectInfoProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.web.client.RestTemplateMetricsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.web.client.RestTemplateMetricsAutoConfiguration$$EnhancerBySpringCGLIB$$fb1cc109",
          "resource": null,
          "dependencies": []
        },
        "healthWebEndpointResponseMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.health.HealthWebEndpointResponseMapper",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.class]",
          "dependencies": [
            "createHealthStatusHttpMapper",
            "management.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$bf1757a9",
          "resource": null,
          "dependencies": []
        },
        "endpointOperationParameterMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.invoke.convert.ConversionServiceParameterValueMapper",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "infoEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.info.InfoEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "defaultMessageConverters": {
          "aliases": [],
          "scope": "singleton",
          "type": "java.util.ArrayList",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "alpsJsonHttpMessageConverter",
            "halJacksonHttpMessageConverter",
            "jacksonHttpMessageConverter",
            "uriListHttpMessageConverter"
          ]
        },
        "auditableBeanWrapperFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.auditing.MappingAuditableBeanWrapperFactory",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "persistentEntities"
          ]
        },
        "defaultRelProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.core.EvoInflectorRelProvider",
          "resource": null,
          "dependencies": []
        },
        "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.ResourceProperties",
          "resource": null,
          "dependencies": []
        },
        "httpHeadersPreparer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.HttpHeadersPreparer",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "auditableBeanWrapperFactory"
          ]
        },
        "management.health.status-org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$10e61853",
          "resource": null,
          "dependencies": []
        },
        "classLoaderMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$JvmMeterBindersConfiguration.class]",
          "dependencies": []
        },
        "persistentEntityArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.PersistentEntityResourceHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "defaultMessageConverters",
            "repoRequestArgumentResolver",
            "backendIdHandlerMethodArgumentResolver",
            "persistentEntities",
            "associationLinks"
          ]
        },
        "servletWebChildContextFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration$$EnhancerBySpringCGLIB$$b233704d",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.core.type.classreading.CachingMetadataReaderFactory",
          "resource": null,
          "dependencies": []
        },
        "jacksonGeoModule": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.geo.GeoModule",
          "resource": "class path resource [org/springframework/data/web/config/SpringDataJacksonConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration$$EnhancerBySpringCGLIB$$b835f1",
          "resource": null,
          "dependencies": []
        },
        "_halObjectMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.fasterxml.jackson.databind.ObjectMapper",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration$$EnhancerBySpringCGLIB$$b26c83c6",
          "resource": null,
          "dependencies": []
        },
        "resourceProcessorInvoker": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.mvc.ResourceProcessorInvoker",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "mvcContentNegotiationManager": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.accept.ContentNegotiationManager",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "objectNamingStrategy": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jmx.ParentAwareNamingStrategy",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class]",
          "dependencies": []
        },
        "sortResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.web.HateoasSortHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration"
          ]
        },
        "conditionEvaluationDeltaLoggingListener": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.ConditionEvaluationDeltaLoggingListener",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration",
          "resource": null,
          "dependencies": []
        },
        "httpExchangeTracer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.trace.http.HttpExchangeTracer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceAutoConfiguration.class]",
          "dependencies": [
            "management.trace.http-org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties"
          ]
        },
        "org.springframework.hateoas.hal.HalConfiguration#0": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.hal.HalConfiguration",
          "resource": null,
          "dependencies": []
        },
        "resourceDescriptionMessageSourceAccessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.context.support.MessageSourceAccessor",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$eb67a040",
          "resource": null,
          "dependencies": []
        },
        "errorAttributes": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.error.DefaultErrorAttributes",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class]",
          "dependencies": []
        },
        "httpRequestHandlerAdapter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$bf899a0d",
          "resource": null,
          "dependencies": []
        },
        "baseUri": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.BaseUri",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration"
          ]
        },
        "websocketContainerCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.websocket.servlet.TomcatWebSocketServletWebServerCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/websocket/servlet/WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration.class]",
          "dependencies": []
        },
        "selfLinkProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.support.DefaultSelfLinkProvider",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "persistentEntities",
            "entityLinks",
            "repositoryRestConfiguration",
            "repositories"
          ]
        },
        "beanNameHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration$$EnhancerBySpringCGLIB$$df4a9ae2",
          "resource": null,
          "dependencies": []
        },
        "relProviderPluginRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.plugin.core.OrderAwarePluginRegistry",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$MeterBindersConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$MeterBindersConfiguration$$EnhancerBySpringCGLIB$$84e255f0",
          "resource": null,
          "dependencies": []
        },
        "webMvcTagsProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.metrics.web.servlet.DefaultWebMvcTagsProvider",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]",
          "dependencies": []
        },
        "createHealthStatusHttpMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.health.HealthStatusHttpMapper",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.class]",
          "dependencies": [
            "management.health.status-org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties"
          ]
        },
        "spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.MultipartProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration$$EnhancerBySpringCGLIB$$fea3f218",
          "resource": null,
          "dependencies": [
            "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties"
          ]
        },
        "diskSpaceHealthIndicatorProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorProperties",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.class]",
          "dependencies": []
        },
        "alpsJsonHttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "alpsConverter"
          ]
        },
        "halObjectMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.fasterxml.jackson.databind.ObjectMapper",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "resourceDescriptionMessageSourceAccessor",
            "repositoryRestConfiguration",
            "persistentEntities",
            "defaultConversionService",
            "repositoryInvokerFactory",
            "repositories",
            "associationLinks",
            "excerptProjector",
            "linkCollector",
            "resourceProcessorInvoker"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat$$EnhancerBySpringCGLIB$$2d2c56e9",
          "resource": null,
          "dependencies": []
        },
        "management.trace.http-org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$f18df582",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$RestartConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$RestartConfiguration$$EnhancerBySpringCGLIB$$293d064f",
          "resource": null,
          "dependencies": [
            "spring.devtools-org.springframework.boot.devtools.autoconfigure.DevToolsProperties"
          ]
        },
        "resourceHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcContentNegotiationManager",
            "mvcUrlPathHelper",
            "repositoryRestConfiguration",
            "mvcPathMatcher"
          ]
        },
        "simpleControllerHandlerAdapter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration$ServletWebHealthConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration$ServletWebHealthConfiguration$$EnhancerBySpringCGLIB$$1cb5c87e",
          "resource": null,
          "dependencies": []
        },
        "httpTraceEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.trace.http.HttpTraceEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.class]",
          "dependencies": [
            "traceRepository"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration$$EnhancerBySpringCGLIB$$5742149e",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.data.web.config.SpringDataJacksonConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.web.config.SpringDataJacksonConfiguration",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$1f2c9e0a",
          "resource": null,
          "dependencies": [
            "management.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties"
          ]
        },
        "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration$AuditEventRepositoryConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration$AuditEventRepositoryConfiguration$$EnhancerBySpringCGLIB$$5c481e97",
          "resource": null,
          "dependencies": []
        },
        "metricsWebClientUriTagFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.config.MeterFilter$9",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsAutoConfiguration.class]",
          "dependencies": [
            "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties"
          ]
        },
        "booksController": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.in28minutes.springboot.basics.springbootin10steps.BooksController",
          "resource": "file [C:\\Users\\rober\\Desktop\\spring-web-services-master\\springboot-in-10-steps\\target\\classes\\com\\in28minutes\\springboot\\basics\\springbootin10steps\\BooksController.class]",
          "dependencies": []
        },
        "httpPutFormContentFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.filter.OrderedHttpPutFormContentFilter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class]",
          "dependencies": []
        },
        "management.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "parameterNamesModule": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.fasterxml.jackson.module.paramnames.ParameterNamesModule",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$ParameterNamesModuleConfiguration.class]",
          "dependencies": []
        },
        "micrometerClock": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.Clock$1",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$4fa2f7e9",
          "resource": null,
          "dependencies": []
        },
        "annotationRelProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.core.AnnotationRelProvider",
          "resource": null,
          "dependencies": []
        },
        "fileSystemWatcherFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$RestartConfiguration$$Lambda$490/970593944",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration.class]",
          "dependencies": []
        },
        "propertiesMeterFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.PropertiesMeterFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.class]",
          "dependencies": [
            "management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties"
          ]
        },
        "auditEventRepository": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.audit.InMemoryAuditEventRepository",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration$AuditEventRepositoryConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration$$EnhancerBySpringCGLIB$$645eed6e",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration$$EnhancerBySpringCGLIB$$5dbfde80",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletAutoConfiguration$$EnhancerBySpringCGLIB$$3c0854f1",
          "resource": null,
          "dependencies": []
        },
        "uptimeMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.system.UptimeMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$MeterBindersConfiguration.class]",
          "dependencies": []
        },
        "controllerExposeExcludePropertyEndpointFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.ExposeExcludePropertyEndpointFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "pathMappedEndpoints": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": [
            "jmxAnnotationEndpointDiscoverer",
            "servletEndpointDiscoverer",
            "webEndpointDiscoverer",
            "controllerEndpointDiscoverer",
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "jvmThreadMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$JvmMeterBindersConfiguration.class]",
          "dependencies": []
        },
        "scheduledTasksEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.HttpEncodingProperties",
          "resource": null,
          "dependencies": []
        },
        "resourceMappings": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.mapping.RepositoryResourceMappings",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "persistentEntities",
            "repositoryRestConfiguration"
          ]
        },
        "org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$Jackson2ModuleRegisteringBeanPostProcessor#0": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$Jackson2ModuleRegisteringBeanPostProcessor",
          "resource": null,
          "dependencies": []
        },
        "hiddenHttpMethodFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.filter.OrderedHiddenHttpMethodFilter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class]",
          "dependencies": []
        },
        "heapDumpWebEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.management.HeapDumpWebEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration$ServletTraceFilterConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration$ServletTraceFilterConfiguration",
          "resource": null,
          "dependencies": []
        },
        "managementServletContext": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration$$Lambda$448/1828629079",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.class]",
          "dependencies": [
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "fileDescriptorMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.system.FileDescriptorMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$MeterBindersConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$$EnhancerBySpringCGLIB$$ee55ea84",
          "resource": null,
          "dependencies": [
            "server-org.springframework.boot.autoconfigure.web.ServerProperties"
          ]
        },
        "servletEndpointDiscoverer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointDiscoverer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration$WebEndpointServletAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "webEndpointPathMapper"
          ]
        },
        "org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$DefaultObjectMapperCustomizer#0": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$DefaultObjectMapperCustomizer",
          "resource": null,
          "dependencies": []
        },
        "mvcValidator": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.validation.ValidatorAdapter",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "defaultConversionService": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.format.support.DefaultFormattingConversionService",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "persistentEntities",
            "repositoryInvokerFactory",
            "repositories"
          ]
        },
        "org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration$$EnhancerBySpringCGLIB$$3b43f9ee",
          "resource": null,
          "dependencies": []
        },
        "conditionsReportEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$$EnhancerBySpringCGLIB$$dcddb093",
          "resource": null,
          "dependencies": []
        },
        "associationLinks": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.mapping.Associations",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "resourceMappings",
            "repositoryRestConfiguration"
          ]
        },
        "mvcResourceUrlProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.resource.ResourceUrlProvider",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "healthEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.health.HealthEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration$$EnhancerBySpringCGLIB$$effe8768",
          "resource": null,
          "dependencies": []
        },
        "viewControllerHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcPathMatcher",
            "mvcUrlPathHelper"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$46ad6547",
          "resource": null,
          "dependencies": []
        },
        "servletEndpointRegistrar": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration.class]",
          "dependencies": [
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties",
            "servletEndpointDiscoverer"
          ]
        },
        "dumpEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.management.ThreadDumpEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "dispatcherServlet": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.DispatcherServlet",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DispatcherServletConfiguration.class]",
          "dependencies": []
        },
        "classPathRestartStrategy": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.classpath.PatternClassPathRestartStrategy",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration.class]",
          "dependencies": []
        },
        "controllerEntityLinks": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.core.ControllerEntityLinks",
          "resource": null,
          "dependencies": [
            "(inner bean)#24d4dbab"
          ]
        },
        "repositoryPropertyReferenceController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/RepositoryPropertyReferenceController.class]",
          "dependencies": [
            "repositories",
            "repositoryInvokerFactory",
            "pagedResourcesAssembler"
          ]
        },
        "persistentEntities": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.mapping.context.PersistentEntities",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$$EnhancerBySpringCGLIB$$952414a0",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$94c298d5",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$$EnhancerBySpringCGLIB$$f6ec2376",
          "resource": null,
          "dependencies": []
        },
        "enumTranslator": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.json.EnumTranslator",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "resourceDescriptionMessageSourceAccessor"
          ]
        },
        "springBootRepositoryRestConfigurer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.data.rest.SpringBootRepositoryRestConfigurer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.class]",
          "dependencies": [
            "jacksonObjectMapperBuilder",
            "spring.data.rest-org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties"
          ]
        },
        "pagedResourcesAssemblerArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.web.PagedResourcesAssemblerArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "pageableResolver"
          ]
        },
        "spring.devtools-org.springframework.boot.devtools.autoconfigure.DevToolsProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.DevToolsProperties",
          "resource": null,
          "dependencies": []
        },
        "webEndpointServletHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.class]",
          "dependencies": [
            "webEndpointDiscoverer",
            "servletEndpointDiscoverer",
            "controllerEndpointDiscoverer",
            "endpointMediaTypes",
            "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties",
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "processorMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.system.ProcessorMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$MeterBindersConfiguration.class]",
          "dependencies": []
        },
        "dispatcherServletMappingDescriptionProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.web.mappings.servlet.DispatcherServletsMappingDescriptionProvider",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration$ServletWebConfiguration$SpringMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$5293ddc6",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$cc2c00bf",
          "resource": null,
          "dependencies": [
            "management.health.status-org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration$$EnhancerBySpringCGLIB$$c3605738",
          "resource": null,
          "dependencies": []
        },
        "jsonSchemaConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.json.PersistentEntityToJsonSchemaConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "persistentEntities",
            "associationLinks",
            "resourceDescriptionMessageSourceAccessor",
            "objectMapper",
            "repositoryRestConfiguration",
            "defaultConversionService",
            "repositoryInvokerFactory"
          ]
        },
        "spring.data.rest-org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties",
          "resource": null,
          "dependencies": []
        },
        "tomcatMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.tomcat.TomcatMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "linkRelationMessageSource": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.context.support.MessageSourceAccessor",
          "resource": "class path resource [org/springframework/hateoas/config/HateoasConfiguration.class]",
          "dependencies": []
        },
        "auditEventsEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.audit.AuditEventsEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.class]",
          "dependencies": [
            "auditEventRepository"
          ]
        },
        "repoRequestArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "defaultConversionService",
            "repositoryInvokerFactory",
            "resourceMetadataHandlerMethodArgumentResolver"
          ]
        },
        "org.springframework.boot.autoconfigure.hateoas.HypermediaHttpMessageConverterConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.hateoas.HypermediaHttpMessageConverterConfiguration",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$$EnhancerBySpringCGLIB$$cf9b0064",
          "resource": null,
          "dependencies": [
            "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties",
            "spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties",
            "org.springframework.beans.factory.support.DefaultListableBeanFactory@7eb91bef"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchHealthIndicatorAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$60777159",
          "resource": null,
          "dependencies": []
        },
        "errorPageRegistrarBeanPostProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.server.ErrorPageRegistrarBeanPostProcessor",
          "resource": null,
          "dependencies": []
        },
        "errorPageCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$ErrorPageCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class]",
          "dependencies": []
        },
        "mvcConversionService": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.format.WebConversionService",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "loggersEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.logging.LoggersEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.class]",
          "dependencies": [
            "springBootLoggingSystem"
          ]
        },
        "profileController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.ProfileController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/ProfileController.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "resourceMappings",
            "repositories"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration$$EnhancerBySpringCGLIB$$2eabf24",
          "resource": null,
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties"
          ]
        },
        "jmxIncludeExcludePropertyEndpointFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.ExposeExcludePropertyEndpointFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.class]",
          "dependencies": []
        },
        "controllerEndpointDiscoverer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointDiscoverer",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]",
          "dependencies": [
            "webEndpointPathMapper"
          ]
        },
        "diskSpaceHealthIndicator": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.system.DiskSpaceHealthIndicator",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.class]",
          "dependencies": [
            "diskSpaceHealthIndicatorProperties"
          ]
        },
        "_linkDiscovererRegistry": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.plugin.core.OrderAwarePluginRegistry",
          "resource": null,
          "dependencies": []
        },
        "tomcatWebServerFactoryCustomizer": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.embedded.TomcatWebServerFactoryCustomizer",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration.class]",
          "dependencies": [
            "environment",
            "server-org.springframework.boot.autoconfigure.web.ServerProperties"
          ]
        },
        "faviconHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration.class]",
          "dependencies": [
            "faviconRequestHandler"
          ]
        },
        "jvmMemoryMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$JvmMeterBindersConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration$$EnhancerBySpringCGLIB$$7c966928",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$d566e04c",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$$EnhancerBySpringCGLIB$$4034a6c1",
          "resource": null,
          "dependencies": []
        },
        "mvcPathMatcher": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.util.AntPathMatcher",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": []
        },
        "handlerExceptionResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.handler.HandlerExceptionResolverComposite",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcContentNegotiationManager",
            "persistentEntities",
            "selfLinkProvider",
            "repositoryRestConfiguration",
            "associationLinks",
            "pageableResolver",
            "objectMapper",
            "repositories",
            "resourceMappings",
            "baseUri",
            "sortResolver",
            "serverHttpRequestMethodArgumentResolver",
            "repoRequestArgumentResolver",
            "persistentEntityArgumentResolver",
            "resourceMetadataHandlerMethodArgumentResolver",
            "backendIdHandlerMethodArgumentResolver",
            "eTagArgumentResolver",
            "defaultMessageConverters"
          ]
        },
        "management.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration$$EnhancerBySpringCGLIB$$e3ad039f",
          "resource": null,
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59",
            "springBootRepositoryRestConfigurer",
            "_relProvider",
            "jacksonGeoModule"
          ]
        },
        "repositoryRestConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.config.RepositoryRestConfiguration",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "metadataConfiguration",
            "enumTranslator"
          ]
        },
        "profileResourceProcessor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.ProfileResourceProcessor",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration"
          ]
        },
        "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$$EnhancerBySpringCGLIB$$e2dbd5e",
          "resource": null,
          "dependencies": []
        },
        "basicErrorController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class]",
          "dependencies": [
            "errorAttributes"
          ]
        },
        "org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$$EnhancerBySpringCGLIB$$355177fc",
          "resource": null,
          "dependencies": []
        },
        "dispatcherServletRegistration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.servlet.ServletRegistrationBean",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration.class]",
          "dependencies": [
            "dispatcherServlet"
          ]
        },
        "mappingsEndpoint": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.web.mappings.MappingsEndpoint",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "repositoryEntityController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositoryEntityController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/RepositoryEntityController.class]",
          "dependencies": [
            "repositories",
            "repositoryRestConfiguration",
            "entityLinks",
            "pagedResourcesAssembler",
            "httpHeadersPreparer"
          ]
        },
        "org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration$$EnhancerBySpringCGLIB$$2a84004b",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.hateoas.LinkDiscoverers#0": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.hateoas.LinkDiscoverers",
          "resource": null,
          "dependencies": [
            "_linkDiscovererRegistry"
          ]
        },
        "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "spring.hateoas-org.springframework.boot.autoconfigure.hateoas.HateoasProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.hateoas.HateoasProperties",
          "resource": null,
          "dependencies": []
        },
        "tomcatServletWebServerFactory": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedTomcat.class]",
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration$$EnhancerBySpringCGLIB$$49c17333",
          "resource": null,
          "dependencies": []
        },
        "liveReloadServerEventListener": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$LiveReloadServerEventListener",
          "resource": "class path resource [org/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$LiveReloadConfiguration.class]",
          "dependencies": [
            "optionalLiveReloadServer"
          ]
        },
        "spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonProperties",
          "resource": null,
          "dependencies": []
        },
        "auditListener": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.audit.listener.AuditListener",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.class]",
          "dependencies": []
        },
        "httpTraceFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceAutoConfiguration$ServletTraceFilterConfiguration.class]",
          "dependencies": [
            "traceRepository",
            "httpExchangeTracer"
          ]
        },
        "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$$EnhancerBySpringCGLIB$$49021f",
          "resource": null,
          "dependencies": []
        },
        "error": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$SpelView",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]",
          "dependencies": []
        },
        "halJacksonHttpMessageConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration$ResourceSupportHttpMessageConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositoryRestConfiguration",
            "halObjectMapper"
          ]
        },
        "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration$$EnhancerBySpringCGLIB$$1e3d6490",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$842b6293",
          "resource": null,
          "dependencies": []
        },
        "repositorySchemaController": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.RepositorySchemaController",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE/spring-data-rest-webmvc-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/RepositorySchemaController.class]",
          "dependencies": [
            "jsonSchemaConverter"
          ]
        },
        "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration$$EnhancerBySpringCGLIB$$cd89d0fc",
          "resource": null,
          "dependencies": []
        },
        "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration$$EnhancerBySpringCGLIB$$12a974c8",
          "resource": null,
          "dependencies": [
            "spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties"
          ]
        },
        "org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration$$EnhancerBySpringCGLIB$$4215541b",
          "resource": null,
          "dependencies": []
        },
        "eTagArgumentResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.ETagArgumentResolver",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "jvmGcMetrics": {
          "aliases": [],
          "scope": "singleton",
          "type": "io.micrometer.core.instrument.binder.jvm.JvmGcMetrics",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration$JvmMeterBindersConfiguration.class]",
          "dependencies": []
        },
        "jpaHelper": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.support.JpaHelper",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "mvcViewResolver": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.servlet.view.ViewResolverComposite",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "mvcContentNegotiationManager"
          ]
        },
        "simpleConfig": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimplePropertiesConfigAdapter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]",
          "dependencies": [
            "management.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties"
          ]
        },
        "welcomePageHandlerMapping": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]",
          "dependencies": [
            "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1bad5e59"
          ]
        },
        "servletExposeExcludePropertyEndpointFilter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.endpoint.ExposeExcludePropertyEndpointFilter",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration.class]",
          "dependencies": [
            "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties"
          ]
        },
        "repositoryRelProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.core.support.RepositoryRelProvider",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration$$EnhancerBySpringCGLIB$$bac17336",
          "resource": null,
          "dependencies": []
        },
        "mvcUriComponentsContributor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.web.method.support.CompositeUriComponentsContributor",
          "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
          "dependencies": [
            "requestMappingHandlerAdapter",
            "mvcConversionService"
          ]
        },
        "filterMappingDescriptionProvider": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.web.mappings.servlet.FiltersMappingDescriptionProvider",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration$ServletWebConfiguration.class]",
          "dependencies": []
        },
        "alpsConverter": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.alps.RootResourceInformationToAlpsDescriptorConverter",
          "resource": "class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]",
          "dependencies": [
            "repositories",
            "persistentEntities",
            "entityLinks",
            "resourceDescriptionMessageSourceAccessor",
            "repositoryRestConfiguration",
            "associationLinks",
            "objectMapper",
            "enumTranslator"
          ]
        },
        "halBrowser": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.data.rest.webmvc.halbrowser.HalBrowser",
          "resource": "URL [jar:file:/C:/Users/rober/.m2/repository/org/springframework/data/spring-data-rest-hal-browser/3.0.5.RELEASE/spring-data-rest-hal-browser-3.0.5.RELEASE.jar!/org/springframework/data/rest/webmvc/halbrowser/HalBrowser.class]",
          "dependencies": []
        },
        "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$$EnhancerBySpringCGLIB$$63399b25",
          "resource": null,
          "dependencies": []
        },
        "jacksonObjectMapper": {
          "aliases": [],
          "scope": "singleton",
          "type": "com.fasterxml.jackson.databind.ObjectMapper",
          "resource": "class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperConfiguration.class]",
          "dependencies": [
            "jacksonObjectMapperBuilder"
          ]
        },
        "environmentWebEndpointExtension": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.class]",
          "dependencies": [
            "environmentEndpoint"
          ]
        },
        "envInfoContributor": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.info.EnvironmentInfoContributor",
          "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.class]",
          "dependencies": [
            "environment"
          ]
        },
        "management.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties",
          "resource": null,
          "dependencies": []
        },
        "platformTransactionManagerCustomizers": {
          "aliases": [],
          "scope": "singleton",
          "type": "org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers",
          "resource": "class path resource [org/springframework/boot/autoconfigure/transaction/TransactionAutoConfiguration.class]",
          "dependencies": []
        }
      },
      "parentId": null
    }
  }
}


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
revisar el articulo 

Complete Maven Project With Code Examples

Our Github repository has all the code examples - https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files

  • Rest Services with Unit and Integration Tests
    • Website-springbootrestservices-simplerestserviceswithunitandintegrationtests.zip
  • Spring Security Example
    • Website-SpringSecurityStarterWebApplication_Final.zip
  • All other examples related to Restful Web Services
    • Website-springbootrestservices-all-examples.zip

What is the core problem that Spring Framework solves?

Think long and hard. What’s the problem Spring Framework solves?

Most important feature of Spring Framework is Dependency Injection. At the core of all Spring Modules is Dependency Injection or IOC Inversion of Control.

Why is this important? Because, when DI or IOC is used properly, we can develop loosely coupled applications. And loosely coupled applications can be easily unit tested.

Let’s consider a simple example:

Example without Dependency Injection

Consider the example below: WelcomeController depends on WelcomeService to get the welcome message. What is it doing to get an instance of WelcomeService? WelcomeService service = new WelcomeService();. It’s creating an instance of it. And that means they are tightly coupled. For example : If I create an mock for WelcomeService in a unit test for WelcomeController, How do I make WelcomeController use the mock? Not easy!

@RestController
public class WelcomeController {

    private WelcomeService service = new WelcomeService();

	@RequestMapping("/welcome")
	public String welcome() {
		return service.retrieveWelcomeMessage();
	}
}

Same Example with Dependency Injection

World looks much easier with dependency injection. You let the spring framework do the hard work. We just use two simple annotations: @Component and @Autowired.

  • Using @Component, we tell Spring Framework - Hey there, this is a bean that you need to manage.
  • Using @Autowired, we tell Spring Framework - Hey find the correct match for this specific type and autowire it in.

In the example below, Spring framework would create a bean for WelcomeService and autowire it into WelcomeController.

In a unit test, I can ask the Spring framework to auto-wire the mock of WelcomeService into WelcomeController. (Spring Boot makes things easy to do this with @MockBean. But, that’s a different story altogether!)


@Component
public class WelcomeService {
    //Bla Bla Bla
}

@RestController
public class WelcomeController {

    @Autowired
    private WelcomeService service;

	@RequestMapping("/welcome")
	public String welcome() {
		return service.retrieveWelcomeMessage();
	}
}

What else does Spring Framework solve?

Problem 1 : Duplication/Plumbing Code

Does Spring Framework stop with Dependency Injection? No. It builds on the core concept of Dependeny Injection with a number of Spring Modules

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring JMS
  • Spring Test

Consider Spring JMS and Spring JDBC for a moment.

Do these modules bring in any new functionality? No. We can do all this with J2EE or JEE. So, what do these bring in? They bring in simple abstractions. Aim of these abstractions is to

  • Reduce Boilerplate Code/ Reduce Duplication
  • Promote Decoupling/ Increase Unit Testablity

For example, you need much less code to use a JDBCTemplate or a JMSTemplate compared to traditional JDBC or JMS.

Problem 2 : Good Integration with Other Frameworks.

Great thing about Spring Framework is that it does not try to solve problems which are already solved. All that it does is to provide a great integration with frameworks which provide great solutions.

  • Hibernate for ORM
  • iBatis for Object Mapping
  • JUnit & Mockito for Unit Testing

What is the core problem that Spring MVC Framework solves?

Spring MVC Framework provides decoupled way of developing web applications. With simple concepts like Dispatcher Servlet, ModelAndView and View Resolver, it makes it easy to develop web applications.

Why do we need Spring Boot?

Spring based applications have a lot of configuration.

When we use Spring MVC, we need to configure component scan, dispatcher servlet, a view resolver, web jars(for delivering static content) among other things.

  <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
  </bean>
  
  <mvc:resources mapping="/webjars/**" location="/webjars/"/>
    

Below code snippet shows typical configuration of a dispatcher servlet in a web application.

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/todo-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

When we use Hibernate/JPA, we would need to configure a datasource, an entity manager factory, a transaction manager among a host of other things.

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${db.driver}" />
        <property name="jdbcUrl" value="${db.url}" />
        <property name="user" value="${db.username}" />
        <property name="password" value="${db.password}" />
    </bean>

    <jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="classpath:config/schema.sql" />
        <jdbc:script location="classpath:config/data.sql" />
    </jdbc:initialize-database>

    <bean
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
        id="entityManagerFactory">
        <property name="persistenceUnitName" value="hsql_pu" />
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

Problem #1 : Spring Boot Auto Configuration : Can we think different?

Spring Boot brings in new thought process around this.

Can we bring more intelligence into this? When a spring mvc jar is added into an application, can we auto configure some beans automatically?

  • How about auto configuring a Data Source if Hibernate jar is on the classpath?
  • How about auto configuring a Dispatcher Servlet if Spring MVC jar is on the classpath?

There would be provisions to override the default auto configuration.

Spring Boot looks at a) Frameworks available on the CLASSPATH b) Existing configuration for the application. Based on these, Spring Boot provides basic configuration needed to configure the application with these frameworks. This is called Auto Configuration.

Problem #2 : Spring Boot Starter Projects : Built around well known patterns

Let’s say we want to develop a web application.

First of all we would need to identify the frameworks we want to use, which versions of frameworks to use and how to connect them together.

All web application have similar needs. Listed below are some of the dependencies we use in our Spring MVC Course. These include Spring MVC, Jackson Databind (for data binding), Hibernate-Validator (for server side validation using Java Validation API) and Log4j (for logging). When creating this course, we had to choose the compatible versions of all these frameworks.

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.2.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.2.Final</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
    

Here’s what the Spring Boot documentations says about starters.

Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop-shop for all the Spring and related technology that you need, without having to hunt through sample code and copy paste loads of dependency descriptors. For example, if you want to get started using Spring and JPA for database access, just include the spring-boot-starter-data-jpa dependency in your project, and you are good to go.

Let’s consider an example starter - Spring Boot Starter Web.

If you want to develop a web application or an application to expose restful services, Spring Boot Start Web is the starter to pick. Lets create a quick project with Spring Boot Starter Web using Spring Initializr.

Dependency for Spring Boot Starter Web

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Following screenshot shows the different dependencies that are added in to our application

Image

Dependencies can be classified into:

  • Spring - core, beans, context, aop
  • Web MVC - (Spring MVC)
  • Jackson - for JSON Binding
  • Validation - Hibernate Validator, Validation API
  • Embedded Servlet Container - Tomcat
  • Logging - logback, slf4j

Any typical web application would use all these dependencies. Spring Boot Starter Web comes pre packaged with these. As a developer, I would not need to worry about either these dependencies or their compatible versions.

Spring Boot Starter Project Options

As we see from Spring Boot Starter Web, starter projects help us in quickly getting started with developing specific types of applications.

  • spring-boot-starter-web-services - SOAP Web Services
  • spring-boot-starter-web - Web & RESTful applications
  • spring-boot-starter-test - Unit testing and Integration Testing
  • spring-boot-starter-jdbc - Traditional JDBC
  • spring-boot-starter-hateoas - Add HATEOAS features to your services
  • spring-boot-starter-security - Authentication and Authorization using Spring Security
  • spring-boot-starter-data-jpa - Spring Data JPA with Hibernate
  • spring-boot-starter-cache - Enabling Spring Framework’s caching support
  • spring-boot-starter-data-rest - Expose Simple REST Services using Spring Data REST

Other Goals of Spring Boot

There are a few starters for technical stuff as well

  • spring-boot-starter-actuator - To use advanced features like monitoring & tracing to your application out of the box
  • spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - To pick your specific choice of Embedded Servlet Container
  • spring-boot-starter-logging - For Logging using logback
  • spring-boot-starter-log4j2 - Logging using Log4j2

Spring Boot aims to enable production ready applications in quick time.

  • Actuator : Enables Advanced Monitoring and Tracing of applications.
  • Embedded Server Integrations - Since server is integrated into the application, I would NOT need to have a separate application server installed on the server.
  • Default Error Handling


*************************************
SALIDA DEL LOG
*******************************************************

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.0.RELEASE)

2021-01-17 09:17:20.243  INFO 3760 --- [  restartedMain] c.i.s.b.s.SpringbootIn10StepsApplication : Starting SpringbootIn10StepsApplication on DESKTOP-DLK8P3R with PID 3760 (C:\Users\rober\Desktop\spring-web-services-master\springboot-in-10-steps\target\classes started by rober in C:\Users\rober\Desktop\spring-web-services-master\springboot-in-10-steps)
2021-01-17 09:17:20.243  INFO 3760 --- [  restartedMain] c.i.s.b.s.SpringbootIn10StepsApplication : No active profile set, falling back to default profiles: default
2021-01-17 09:17:20.315  INFO 3760 --- [  restartedMain] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7bc003fb: startup date [Sun Jan 17 09:17:20 CST 2021]; root of context hierarchy
2021-01-17 09:17:22.491  INFO 3760 --- [  restartedMain] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'httpRequestHandlerAdapter' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration; factoryMethodName=httpRequestHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; factoryMethodName=httpRequestHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]]
2021-01-17 09:17:23.988  INFO 3760 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-01-17 09:17:24.062  INFO 3760 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-01-17 09:17:24.062  INFO 3760 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.28
2021-01-17 09:17:24.070  INFO 3760 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_271\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_271/bin/server;C:/Program Files/Java/jre1.8.0_271/bin;C:/Program Files/Java/jre1.8.0_271/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\oracle\app\oracle\product\11.2.0\server\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\maven\bin;C:\Program Files\Java\jdk1.8.0_51\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.7.0_80\bin;C:\Users\rober\Desktop\openshift\;C:\Ruby24-x64\bin;C:\Program Files\Git\cmd;C:\WINDOWS\System32\OpenSSH\;C:\springCLI\bin;C:\Users\rober\AppData\Local\Programs\Python\Python35\;C:\Users\rober\AppData\Local\Programs\Python\Python35\Scripts\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Users\rober\Desktop\JAVAAFONDO\Java_a_fondo\hsqldb-2.5.0\hsqldb-2.5.0\hsqldb\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\oracle\app\oracle\product\11.2.0\server\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\maven\bin;C:\Program Files\Java\jdk1.8.0_51\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_51\bin;C:\Users\rober\Desktop\openshift\;C:\Ruby24-x64\bin;C:\Program Files\Git\cmd;C:\WINDOWS\System32\OpenSSH\;C:\springCLI\bin;C:\Users\rober\AppData\Local\Programs\Python\Python35\;C:\Users\rober\AppData\Local\Programs\Python\Pyt;;C:\Users\rober\Desktop\eclipse-jee-oxygen-R-win32-x86_64\eclipse;;.]
2021-01-17 09:17:24.222  INFO 3760 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-01-17 09:17:24.222  INFO 3760 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3907 ms
2021-01-17 09:17:25.182  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpTraceFilter' to: [/*]
2021-01-17 09:17:25.191  INFO 3760 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'webMvcMetricsFilter' to: [/*]
2021-01-17 09:17:26.207  INFO 3760 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7bc003fb: startup date [Sun Jan 17 09:17:20 CST 2021]; root of context hierarchy
2021-01-17 09:17:26.365  INFO 3760 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/books],methods=[GET]}" onto public java.util.List<com.in28minutes.springboot.basics.springbootin10steps.Book> com.in28minutes.springboot.basics.springbootin10steps.BooksController.getAllBooks()
2021-01-17 09:17:26.373  INFO 3760 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2021-01-17 09:17:26.373  INFO 3760 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2021-01-17 09:17:26.413  INFO 3760 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2021-01-17 09:17:26.413  INFO 3760 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2021-01-17 09:17:26.413  INFO 3760 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/browser/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2021-01-17 09:17:26.429  INFO 3760 --- [  restartedMain] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in repositoryRestExceptionHandler
2021-01-17 09:17:26.517  INFO 3760 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2021-01-17 09:17:26.909  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerAdapter   : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7bc003fb: startup date [Sun Jan 17 09:17:20 CST 2021]; root of context hierarchy
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[HEAD],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.headForItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]}" onto public org.springframework.hateoas.Resources<?> org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResourceCompact(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[PATCH],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.patchItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.data.rest.webmvc.support.ETag,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException,org.springframework.data.rest.webmvc.ResourceNotFoundException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.hateoas.Resources<?> org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}],methods=[POST],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.postCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}],methods=[HEAD],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.headCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable) throws org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[OPTIONS],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.optionsForItemResource(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[DELETE],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.deleteItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.support.ETag) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}],methods=[OPTIONS],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.optionsForCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[PUT],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.putItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.data.rest.webmvc.support.ETag,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.Resource<?>> org.springframework.data.rest.webmvc.RepositoryEntityController.getItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.http.HttpHeaders) throws org.springframework.web.HttpRequestMethodNotSupportedException
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/ || ],methods=[OPTIONS],produces=[application/hal+json || application/json]}" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositoryController.optionsForRepositories()
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/ || ],methods=[HEAD],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryController.headForRepositories()
2021-01-17 09:17:26.933  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/ || ],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.RepositoryLinksResource> org.springframework.data.rest.webmvc.RepositoryController.listRepositories()
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}/{propertyId}],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}],methods=[PATCH || PUT || POST],consumes=[application/json || application/x-spring-data-compact+json || text/uri-list],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.createPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.http.HttpMethod,org.springframework.hateoas.Resources<java.lang.Object>,java.io.Serializable,java.lang.String) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReferenceCompact(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}],methods=[DELETE],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.deletePropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/{id}/{property}/{propertyId}],methods=[DELETE],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.deletePropertyReferenceId(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,java.lang.String) throws java.lang.Exception
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search/{search}],methods=[GET],produces=[application/x-spring-data-compact+json]}" onto public org.springframework.hateoas.ResourceSupport org.springframework.data.rest.webmvc.RepositorySearchController.executeSearchCompact(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.http.HttpHeaders,org.springframework.util.MultiValueMap<java.lang.String, java.lang.Object>,java.lang.String,java.lang.String,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search],methods=[OPTIONS],produces=[application/hal+json || application/json]}" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositorySearchController.optionsForSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search],methods=[HEAD],produces=[application/hal+json || application/json]}" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositorySearchController.headForSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.data.rest.webmvc.RepositorySearchesResource org.springframework.data.rest.webmvc.RepositorySearchController.listSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search/{search}],methods=[GET],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositorySearchController.executeSearch(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.util.MultiValueMap<java.lang.String, java.lang.Object>,java.lang.String,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.http.HttpHeaders)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search/{search}],methods=[OPTIONS],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.data.rest.webmvc.RepositorySearchController.optionsForSearch(org.springframework.data.rest.webmvc.RootResourceInformation,java.lang.String)
2021-01-17 09:17:26.941  INFO 3760 --- [  restartedMain] o.s.d.r.w.RepositoryRestHandlerMapping   : Mapped "{[/{repository}/search/{search}],methods=[HEAD],produces=[application/hal+json || application/json]}" onto public org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.data.rest.webmvc.RepositorySearchController.headForSearch(org.springframework.data.rest.webmvc.RootResourceInformation,java.lang.String)
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/ || ],methods=[GET],produces=[text/html]}" onto public org.springframework.web.servlet.View org.springframework.data.rest.webmvc.halbrowser.HalBrowser.index(javax.servlet.http.HttpServletRequest)
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/browser],methods=[GET]}" onto public org.springframework.web.servlet.View org.springframework.data.rest.webmvc.halbrowser.HalBrowser.browser(javax.servlet.http.HttpServletRequest)
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/profile/{repository}],methods=[GET],produces=[application/schema+json]}" onto public org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.json.JsonSchema> org.springframework.data.rest.webmvc.RepositorySchemaController.schema(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/profile],methods=[GET]}" onto org.springframework.http.HttpEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.ProfileController.listAllFormsOfMetadata()
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/profile],methods=[OPTIONS]}" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.ProfileController.profileOptions()
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/profile/{repository}],methods=[GET],produces=[application/alps+json || */*]}" onto org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.RootResourceInformation> org.springframework.data.rest.webmvc.alps.AlpsController.descriptor(org.springframework.data.rest.webmvc.RootResourceInformation)
2021-01-17 09:17:26.949  INFO 3760 --- [  restartedMain] o.s.d.r.w.BasePathAwareHandlerMapping    : Mapped "{[/profile/{repository}],methods=[OPTIONS],produces=[application/alps+json]}" onto org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.alps.AlpsController.alpsOptions()
2021-01-17 09:17:27.085  INFO 3760 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-01-17 09:17:27.133  INFO 3760 --- [  restartedMain] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2021-01-17 09:17:27.133  INFO 3760 --- [  restartedMain] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2021-01-17 09:17:27.141  INFO 3760 --- [  restartedMain] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map<java.lang.String, java.util.Map<java.lang.String, org.springframework.boot.actuate.endpoint.web.Link>> org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.links(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2021-01-17 09:17:27.269  INFO 3760 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2021-01-17 09:17:27.403  INFO 3760 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-01-17 09:17:27.411  INFO 3760 --- [  restartedMain] c.i.s.b.s.SpringbootIn10StepsApplication : Started SpringbootIn10StepsApplication in 8.065 seconds (JVM running for 8.987)
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
springbootIn10StepsApplication
org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
booksController
halBrowser
repositorySchemaController
repositoryEntityController
repositoryController
profileController
repositoryPropertyReferenceController
repositorySearchController
alpsController
org.springframework.boot.autoconfigure.AutoConfigurationPackages
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
org.springframework.boot.autoconfigure.condition.BeanTypeRegistry
propertySourcesPlaceholderConfigurer
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration
standardJacksonObjectMapperBuilderCustomizer
spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration
jacksonObjectMapperBuilder
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration
parameterNamesModule
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration
jacksonObjectMapper
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
jsonComponentModule
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration
websocketContainerCustomizer
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat
tomcatServletWebServerFactory
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
servletWebServerFactoryCustomizer
tomcatServletWebServerFactoryCustomizer
server-org.springframework.boot.autoconfigure.web.ServerProperties
webServerFactoryCustomizerBeanPostProcessor
errorPageRegistrarBeanPostProcessor
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration
dispatcherServlet
spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration
dispatcherServletRegistration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration
jacksonCodecCustomizer
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration
defaultValidator
methodValidationPostProcessor
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
error
beanNameViewResolver
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration
conventionErrorViewResolver
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
errorAttributes
basicErrorController
errorPageCustomizer
preserveErrorControllerTargetClassPostProcessor
spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration
requestMappingHandlerAdapter
requestMappingHandlerMapping
mvcConversionService
mvcValidator
mvcContentNegotiationManager
mvcPathMatcher
mvcUrlPathHelper
viewControllerHandlerMapping
beanNameHandlerMapping
resourceHandlerMapping
mvcResourceUrlProvider
defaultServletHandlerMapping
mvcUriComponentsContributor
httpRequestHandlerAdapter
simpleControllerHandlerAdapter
handlerExceptionResolver
mvcViewResolver
mvcHandlerMappingIntrospector
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration
faviconHandlerMapping
faviconRequestHandler
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter
defaultViewResolver
viewResolver
welcomePageHandlerMapping
requestContextFilter
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
hiddenHttpMethodFilter
httpPutFormContentFilter
org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration$AuditEventRepositoryConfiguration
auditEventRepository
org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration
auditListener
org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration
auditEventsEndpoint
org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration
beansEndpoint
org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorAutoConfiguration
diskSpaceHealthIndicator
diskSpaceHealthIndicatorProperties
org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration
org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchHealthIndicatorAutoConfiguration
org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration
healthAggregator
management.health.status-org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration
healthEndpoint
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration$ServletWebHealthConfiguration
healthEndpointWebExtension
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration
createHealthStatusHttpMapper
healthWebEndpointResponseMapper
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration
management.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties
org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration
servletWebChildContextFactory
managementServletContext
org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpointAutoConfiguration
conditionsReportEndpoint
org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration
configurationPropertiesReportEndpoint
management.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties
org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration
endpointOperationParameterMapper
endpointCachingOperationInvokerAdvisor
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
mbeanExporter
objectNamingStrategy
mbeanServer
org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration
jmxAnnotationEndpointDiscoverer
jmxMBeanExporter
jmxIncludeExcludePropertyEndpointFilter
management.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletAutoConfiguration
servletEndpointDiscoverer
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration
webEndpointPathMapper
endpointMediaTypes
webEndpointDiscoverer
controllerEndpointDiscoverer
pathMappedEndpoints
webExposeExcludePropertyEndpointFilter
controllerExposeExcludePropertyEndpointFilter
management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties
org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration
environmentEndpoint
environmentWebEndpointExtension
management.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration
envInfoContributor
management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties
org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration
infoEndpoint
org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration
management.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties
org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration
loggersEndpoint
org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration
heapDumpWebEndpoint
org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration
dumpEndpoint
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$MeterBindersConfiguration
logbackMetrics
uptimeMetrics
processorMetrics
fileDescriptorMetrics
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration$JvmMeterBindersConfiguration
jvmGcMetrics
jvmMemoryMetrics
jvmThreadMetrics
classLoaderMetrics
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration
micrometerClock
meterRegistryPostProcessor
propertiesMeterFilter
management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties
org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration
simpleMeterRegistry
simpleConfig
management.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties
org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration
metricsEndpoint
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration
stringHttpMessageConverter
spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties
org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration
mappingJackson2HttpMessageConverter
org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration
messageConverters
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
restTemplateBuilder
org.springframework.boot.actuate.autoconfigure.metrics.web.client.RestTemplateMetricsAutoConfiguration
restTemplateTagConfigurer
metricsRestTemplateCustomizer
metricsWebClientUriTagFilter
org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration
webMvcTagsProvider
webMvcMetricsFilter
org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration
tomcatMetrics
contextCapturingServletTomcatCustomizer
org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration
scheduledTasksEndpoint
org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration$ServletTraceFilterConfiguration
httpTraceFilter
org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration
traceRepository
httpExchangeTracer
management.trace.http-org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties
org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceEndpointAutoConfiguration
httpTraceEndpoint
org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration$SpringMvcConfiguration
dispatcherServletMappingDescriptionProvider
org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration$ServletWebConfiguration
servletMappingDescriptionProvider
filterMappingDescriptionProvider
org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration
mappingsEndpoint
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration
persistenceExceptionTranslationPostProcessor
org.springframework.hateoas.config.HateoasConfiguration
linkRelationMessageSource
org.springframework.data.web.config.SpringDataJacksonConfiguration
jacksonGeoModule
org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration
repositories
repositoryRelProvider
persistentEntities
defaultConversionService
validatingRepositoryEventListener
jpaHelper
repositoryRestConfiguration
projectionDefinitionRegistrar
metadataConfiguration
baseUri
annotatedEventHandlerInvoker
domainObjectMerger
serverHttpRequestMethodArgumentResolver
repoRequestArgumentResolver
resourceMetadataHandlerMethodArgumentResolver
backendIdHandlerMethodArgumentResolver
eTagArgumentResolver
entityLinks
persistentEntityArgumentResolver
jsonSchemaConverter
resourceDescriptionMessageSourceAccessor
objectMapper
jacksonHttpMessageConverter
halJacksonHttpMessageConverter
halObjectMapper
uriListHttpMessageConverter
resourceProcessorInvoker
repositoryExporterHandlerAdapter
restHandlerMapping
resourceMappings
linkCollector
excerptProjector
repositoryRestExceptionHandler
repositoryInvokerFactory
defaultMessageConverters
alpsJsonHttpMessageConverter
pageableResolver
sortResolver
backendIdConverterRegistry
auditableBeanWrapperFactory
httpHeadersPreparer
selfLinkProvider
associationLinks
enumTranslator
alpsConverter
profileResourceProcessor
pagedResourcesAssembler
pagedResourcesAssemblerArgumentResolver
entityLinksPluginRegistry
controllerEntityLinks
delegatingEntityLinks
_halObjectMapper
org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$DefaultObjectMapperCustomizer#0
org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$Jackson2ModuleRegisteringBeanPostProcessor#0
org.springframework.hateoas.hal.HalConfiguration#0
_linkDiscovererRegistry
org.springframework.hateoas.LinkDiscoverers#0
defaultRelProvider
annotationRelProvider
relProviderPluginRegistry
_relProvider
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration
springBootRepositoryRestConfigurer
spring.data.rest-org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties
org.springframework.boot.autoconfigure.hateoas.HypermediaHttpMessageConverterConfiguration
halMessageConverterSupportedMediaTypeCustomizer
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration
spring.hateoas-org.springframework.boot.autoconfigure.hateoas.HateoasProperties
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
platformTransactionManagerCustomizers
spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration
spring.security-org.springframework.boot.autoconfigure.security.SecurityProperties
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration
tomcatWebServerFactoryCustomizer
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
characterEncodingFilter
localeCharsetMappingsCustomizer
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
multipartConfigElement
multipartResolver
spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties
org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$RestartConfiguration
classPathFileSystemWatcher
classPathRestartStrategy
hateoasObjenesisCacheDisabler
fileSystemWatcherFactory
conditionEvaluationDeltaLoggingListener
org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$LiveReloadConfiguration
liveReloadServer
optionalLiveReloadServer
liveReloadServerEventListener
org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration
spring.devtools-org.springframework.boot.devtools.autoconfigure.DevToolsProperties
org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration
servletEndpointRegistrar
servletExposeExcludePropertyEndpointFilter
org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration
webEndpointServletHandlerMapping
controllerEndpointHandlerMapping
management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties
org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration
org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration
org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration
management.server-org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties


*********************************************************


Lambdas, streams, functional and reactive programming

Modern Java

IN ACTION

Raoul-Gabriel Urma

Mario Fusco Alan Mycroft

MANNING


No hay comentarios:

Publicar un comentario

zen consultora

Blogger Widgets

Entrada destacada

Platzy y el payaso Freddy Vega, PLATZI APESTA, PLATZI NO SIRVE, PLATZI ES UNA ESTAFA

  Platzy y los payasos fredy vega y cvander parte 1,  PLATZI ES UNA ESTAFA Hola amigos, este post va a ir creciendo conforme vaya escribiend...