Hable acerca de @EnableConfigurationProperties

comparación entre los dos

  • @Propiedades de configuración

Al usar @ConfigurationProperties, al vincular las propiedades de la clase de configuración con el archivo de configuración yml, también debe agregar la anotación @Component para vincularla e inyectarla en el contenedor IOC. Si no agrega @Component, no será válido .

  • @EnableConfigurationProperties

La función de @EnableConfigurationProperties: hará que la clase de configuración anotada con @ConfigurationProperties surta efecto, inyecte la clase en el contenedor IOC y la entregue al contenedor IOC para su administración. En este momento, no es necesario agregar @Component a la clase de configuración.

Demostración real

@Propiedades de configuración

La clase de configuración es la siguiente:

@Component
@ConfigurationProperties(prefix = "demo")
@Data
public class DemoConfig {
    private String name;
    private Integer age;
}

archivo de configuración yml

demo:
  name: 张三
  age: 20

código de prueba

@Component
public class Test implements ApplicationRunner {

    @Autowired
    DemoConfig demoConfig;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(demoConfig);
    }
}

Prueba para eliminar el @Component de la clase de configuración

El error es el siguiente:

Uso de @EnableConfigurationProperties

@Component
@EnableConfigurationProperties(DemoConfig.class)
public class Test implements ApplicationRunner {

    @Autowired
    DemoConfig demoConfig;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(demoConfig);
    }
}

El efecto es el siguiente:

La razón por la que aparece @EnableConfigurationProperties

razón principal

Montaje automático de EnableAutoConfiguration en springboot

Déjame hablar sobre la conclusión primero.

  • La función del ensamblado automático EnableAutoConfiguration: es decir, construir la clase especificada en un objeto y colocarlo en el contenedor de primavera para convertirlo en un objeto bean, que es similar a la anotación @Bean.
  • Cuando se inicia springboot, escanea todos los archivos spring.factories del proyecto.

Dar un ejemplo

  • ruta de escaneo predeterminada de springboot

1. Cuando se inicia Springboot, necesita escanear los archivos de clase en la ruta, generar la definición de bean BeanDefinition y crear el objeto de bean.La ruta de escaneo predeterminada es el directorio donde se encuentra la clase de inicio.


2. Como se muestra en el siguiente caso de prueba:
incluso si @Component se agrega a las clases fuera del directorio del paquete donde se encuentra la clase de inicio, no se pueden escanear para generar objetos de bean.


3. Si desea escanear clases fuera del directorio del paquete donde se encuentra la clase de inicio para generar objetos de bean, puede agregar anotaciones @ComponentScan a la clase de inicio

Introducir un paquete jar de terceros (que también contiene objetos de frijol)

1. Aquí usamos el paquete jar autoempaquetado local (SDK) como ejemplo
2. Prepare un SDK de prueba:


Introduzca el SDK en el proyecto de prueba:


3. Realizar verificación de prueba


Como se puede ver en la imagen de arriba, después de que introducimos el SDK y lo usamos, informará que no se puede encontrar el objeto bean Extrañamente, ¿la clase TestDemoBean del SDK no está anotada con @Component? Esto está relacionado con el primer punto, la ruta de escaneo predeterminada de springboot. La ruta TestDemoBean en el SDK es com.example.jardemo.xxxx, y la ruta de escaneo en el proyecto de prueba es: com.example.csdn. Naturalmente, el inicio de Springboot no se puede escanear.
4. Haz preguntas


5. Modifique el SDK y agregue el archivo de configuración spring.factories


Coloque el paquete nuevo en el almacén, recuerde volver a cargar el paquete jar importado y verifique el archivo spring.factories de la siguiente manera:


Recordatorio: algunas personas pueden encontrar que los archivos en el directorio de recursos no están empaquetados al empaquetar el SDK. Modifique la configuración del archivo pom.xml:


6. Revise el código de prueba nuevamente:

resumen

1. El contenido anterior es principalmente para decir: al proporcionar el SDK, para que sea más fácil para otros usar los objetos bean de este SDK, debe crear un archivo spring.factories en su directorio resource/META-INF, y use EnableAutoConfiguration para convertir los objetos de bean que deben convertirse en objetos de bean. Las clases se convierten en objetos de bean.
2. De esta manera, cuando otros proyectos hacen referencia al SDK, no hay necesidad de escribir la ruta que debe escanearse en la clase de inicio
3. De hecho, la clase de configuración puede usar @ConfigurationProperties+@Component: pero debido a las siguientes razones:
(1) Sabemos que este método es Cuando Spring escanea @Component en la clase al inicio, lo convertirá en un objeto bean, y debido a que está en el SDK (paquete jar de terceros), es necesario agregar la clase de configuración a EnableAutoConfiguration en spring.factories Path, para que pueda ser escaneada por spring
(2) Entonces, hay un problema.Si hay muchos elementos de configuración, ¿no es porque EnableAutoConfiguration en su spring.factories? además, la ruta de este tipo es enorme y el mantenimiento es inconveniente, de la siguiente manera:


Por lo tanto, podemos usar @EnableConfigurationProperties para esta clase de configuración. Agregar esta anotación en la clase de configuración que debe usarse anotará automáticamente el objeto de clase especificado por la anotación @EnableConfigurationProperties para crear un objeto bean, de modo que no se pueda escribir en Spring Las fábricas están arriba:


4. Vuelva a empaquetar, pruébelo:

Resumir

Se puede entender simplemente:
@ConfigurationProperties+@Component = @EnableConfigurationProperties, aquellos que estudian profundamente pueden hacerlo para profundizar su comprensión e impresión. En el trabajo, no hay una forma fija de decir cuál usar. Puedes usarlo de acuerdo a tus hábitos personales. Esta es "Anqianmahou", una cuenta dedicada a compartir productos secos prácticos, y se actualiza continuamente más contenido.

Supongo que te gusta

Origin blog.csdn.net/weixin_42329623/article/details/131507421
Recomendado
Clasificación