CodeGym /Cursos Java /Módulo 5. Spring /Configuración y Autoconfiguración

Configuración y Autoconfiguración

Módulo 5. Spring
Nivel 15 , Lección 2
Disponible

Spring Boot prefiere una configuración basada en Java. Aunque puede usar SpringApplication con fuentes XML, generalmente recomendamos que la fuente principal sea una única clase anotada con @Configuration. Normalmente, la clase que define el método main es un buen candidato para ser el @Configuration principal.

Hay muchos ejemplos de configuración de Spring publicados en Internet que utilizan la configuración XML. Si es posible, intente siempre utilizar una configuración equivalente basada en Java. Buscar anotaciones Enable* puede ser un buen punto de partida.

Importar clases de configuración adicionales

No es necesario colocar todas las anotaciones @Configuration en una clase. Puede utilizar la anotación @Import para importar clases de configuración adicionales. Además, puede utilizar la anotación @ComponentScan para recopilar automáticamente todos los componentes de Spring, incluidas las clases con la anotación @Configuration.

Importar configuración XML

Si es absolutamente necesario utilizar una configuración basada en XML, le recomendamos comenzar con una clase marcada con la anotación @Configuration. Luego puede utilizar la anotación @ImportResource para cargar los archivos de configuración XML.

Configuración automática

La configuración automática en Spring Boot intenta configurar automáticamente su aplicación Spring en función de las dependencias jar agregadas. Por ejemplo, si HSQLDB está en su classpath, pero no ha configurado manualmente ningún beans para conectarse a la base de datos, Spring Boot configurará automáticamente una base de datos residente.

Debe optar explícitamente por la configuración automática agregando las anotaciones @EnableAutoConfiguration o @SpringBootApplication a una de sus clases con @Configuration anotación.

Solo se debe agregar una anotación @SpringBootApplication o @EnableAutoConfiguration. Generalmente recomendamos agregar una anotación particular solo a la clase principal anotada con @Configuration.

Reemplazo gradual de la configuración automática

La configuración automática funciona de forma no agresiva. Puede comenzar a definir su propia configuración en cualquier momento para reemplazar ciertas partes de la configuración automática. Por ejemplo, si agrega su propio bean DataSource, la compatibilidad con bases de datos integradas está deshabilitada de forma predeterminada.

Si desea saber qué configuración automática se está aplicando actualmente y por qué, ejecute la aplicación con la opción --debug. Esto habilitará los registros de depuración para los administradores de registro primarios seleccionados y generará un informe de condición en la consola.

Deshabilitar ciertas clases de configuración automática

Si descubre que hay ciertas clases de configuración automática que no necesita, puede usar el atributo de exclusión en la anotación @SpringBootApplication para deshabilitarlas, como se muestra en el siguiente ejemplo:

Java
importar org.springframework.boot.autoconfigure.SpringBootApplication;
importar org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(excluir = { DataSourceAutoConfiguration.class })
clase pública MiAplicación {
}
Kotlin
importar org.springframework.boot.autoconfigure.SpringBootApplication
importar org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
@SpringBootApplication(exclude = [DataSourceAutoConfiguration::clase])
clase MiAplicación

Si la clase no está en el classpath, puede usar el atributo excludeName de la anotación y especificar el nombre completo en su lugar. Si prefiere utilizar la anotación @EnableAutoConfiguration en lugar de la anotación @SpringBootApplication, las funciones exclude y excludeName también estar disponible. Finalmente, puede controlar la lista de clases de configuración automática que se excluyen usando la propiedad spring.autoconfigure.exclude.

Puedes definir excepciones tanto en el nivel de anotación como usando una propiedad.
Aunque las clases de configuración automática son public, el único aspecto de una clase que se considera una API pública es el nombre de la clase, que puede se puede utilizar para desactivar la configuración automática. El contenido real de estas clases, como las clases de configuración anidadas o los métodos de bean, son solo para uso interno y no recomendamos usarlos directamente.

Las judías verdes y la inyección de dependencia

Puede utilizar cualquiera de las herramientas estándar de Spring Framework para definir sus beans y sus dependencias inyectables. Generalmente recomendamos usar la inyección de dependencia del constructor para vincular dependencias y la anotación @ComponentScan para encontrar beans.

Si estructura su código como se sugirió anteriormente (colocando la clase de aplicación en el paquete superior), puede agregar la anotación @ComponentScan sin ningún argumento, o usar la anotación @SpringBootApplication, que lo contiene implícitamente. Todos los componentes de su aplicación (anotaciones @Component, @Service, @Repository, @Controller y otras) son registrado automáticamente como Spring beans.

El siguiente ejemplo muestra un bean marcado con la anotación @Service que utiliza la inyección de dependencia del constructor para obtener el bean RiskAssessor requerido:

Java
importar org.springframework.stereotype.Service;
@Servicio
clase pública MyAccountService implementa AccountService {
    RiskAssessor final privado RiskAssessor;
    público MyAccountService(Evaluador de riesgos evaluador de riesgos) {
        this.riskAssessor = riesgoAssessor;
    }
    //...
}
Kotlin
importar org.springframework.stereotype.Service
@Servicio
clase MyAccountService (valor privado RiskAssessor: RiskAssessor): AccountService

Si un bean tiene más de un constructor, entonces necesitas marcar el que deseas usar Spring con la anotación @Autowired:

Java
import java.io.PrintStream;
importar org.springframework.beans.factory.annotation.Autowired;
importar org.springframework.stereotype.Service;
@Servicio
clase pública MyAccountService implementa AccountService {
    RiskAssessor final privado RiskAssessor;
    PrintStream final privado;
    @autocableado
    público MyAccountService(Evaluador de riesgos evaluador de riesgos) {
        this.riskAssessor = riesgoAssessor;
        this.out = Sistema.out;
    }
    público MyAccountService(RiskAssessor RiskAssessor, PrintStream out) {
        this.riskAssessor = riesgoAssessor;
        this.out = fuera;
    }
    //...
}
Kotlin
importar org.springframework.beans.factory.annotation.Autowired
importar org.springframework.stereotype.Service
importar java.io.PrintStream
@Servicio
clase MiServicioCuenta: ServicioCuenta {
    val privado RiskAssessor: RiskAssessor
    salida de valor privado: PrintStream
    @autocableado
    constructor (evaluador de riesgos: evaluador de riesgos) {
        this.riskAssessor = evaluador de riesgos
        salida = Sistema.salida
    }
    constructor(riesgoAssessor: RiskAssessor, fuera: PrintStream) {
        this.riskAssessor = evaluador de riesgos
        this.out = fuera
    }
    //...
}
Tenga en cuenta que el uso de la inyección de dependencia del constructor le permite marcar el campo riskAssessor como final, lo que significa que no se puede cambiar más adelante.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION