Buscar..


Introducción

En este tema, haré una visión general de la exploración del paquete de arranque de primavera.

Puede encontrar información básica en Spring Boots en el siguiente enlace ( using-boot-structuring-your-code ) pero intentaré proporcionar información más detallada.

Spring boot, y spring en general, proporcionan una función para escanear automáticamente paquetes para ciertas anotaciones con el fin de crear beans y configuration .

Parámetros

Anotación Detalles
@SpringBootApplication Anotación principal de la aplicación de arranque de muelle. se utiliza una vez en la aplicación, contiene un método principal y actúa como paquete principal para el escaneo de paquetes
@SpringBootConfiguration Indica que una clase proporciona la aplicación Spring Boot. Debe declararse solo una vez en la aplicación, generalmente de forma automática mediante la configuración de @SpringBootApplication
@EnableAutoConfiguration Habilitar la configuración automática del contexto de la aplicación Spring. Debe declararse solo una vez en la aplicación, generalmente de forma automática mediante la configuración de @SpringBootApplication
@ComponentScan Se utiliza para activar el escaneo automático de paquetes en un paquete determinado y sus hijos o para configurar el escaneo de paquetes personalizados
@Configuración Se utiliza para declarar uno o más métodos @Bean . Puede seleccionarse mediante el escaneo automático de paquetes para declarar uno o más métodos @Bean lugar de la configuración xml tradicional
@Frijol Indica que un método produce un bean para ser administrado por el contenedor Spring. Por @Bean general, los métodos anotados de @Bean se colocarán en las clases anotadas de @Configuration que se seleccionarán mediante el escaneo del paquete para crear beans basados ​​en la configuración de Java.
@Componente Al declarar una clase como @Component se convierte en un candidato para la detección automática cuando se utiliza la configuración basada en anotaciones y el escaneo de classpath. Por lo general, una clase anotada con @Component se convertirá en un bean en la aplicación
@Repositorio Definido originalmente por Domain-Driven Design (Evans, 2003) como "un mecanismo para encapsular el almacenamiento. Normalmente se usa para indicar un Repository para spring data
@Servicio Muy similar en la práctica a @Component . originalmente definido por Domain-Driven Design (Evans, 2003) como "una operación ofrecida como una interfaz que se mantiene aislada en el modelo, sin estado encapsulado".
@Controlador Indica que una clase anotada es un "Controlador" (por ejemplo, un controlador web).
@RestController Una anotación de conveniencia que se anota con @Controller y @ResponseBody . Se seleccionará automáticamente de forma predeterminada porque contiene la anotación @Controller que se selecciona de forma predeterminada.

@SpringBootApplication

La forma más básica de estructurar su código utilizando Spring Boot para un buen escaneo automático de paquetes es mediante la anotación @SpringBootApplication . Esta anotación proporciona en sí misma otras 3 anotaciones que ayudan con el escaneo automático: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (más información sobre cada anotación en la sección Parameters ).

@SpringBootApplication lo @SpringBootApplication , @SpringBootApplication se colocará en el paquete principal y todos los demás componentes se colocarán en paquetes bajo este archivo:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

A menos que se indique lo contrario, Spring Boot detecta las @Configuration , @Component , @Repository , @Service , @Controller , @RestController automáticamente en los paquetes escaneados ( @Configuration y @RestController se seleccionan porque están anotadas por @Component y @Controller consecuencia ).

Ejemplo de código básico:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

Configurando paquetes / clases explícitamente

Desde la versión 1.3 también puede decirle a Spring Boot que scanBasePackages paquetes específicos configurando scanBasePackages o scanBasePackageClasses en @SpringBootApplication en lugar de especificar @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") : establece com.example.myproject como el paquete base para escanear.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) : una alternativa segura para el scanBasePackages a scanBasePackages establece el paquete de CustomerController.java , com.example.myproject.web , como el paquete base para escanear.

Excluyendo la autoconfiguración

Otra característica importante es la capacidad de excluir clases específicas de configuración automática utilizando exclude o excludeName (existe excludeName desde la versión 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) : excluirá DemoConfiguration de la exploración automática de paquetes.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - hará lo mismo usando el nombre completamente clasificado de la clase.

@ComponentScan

Puede usar @ComponentScan para configurar un análisis de paquetes más complejo. También hay @ComponentScans que actúan como una anotación de contenedor que agrega varias anotaciones de @ComponentScan .

Ejemplos de código básico

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

La indicación de @ComponentScan sin configuración actúa como @SpringBootApplication y analiza todos los paquetes de la clase anotada con esta anotación.

En este ejemplo, @ComponentScan algunos de los atributos útiles de @ComponentScan :

  1. Los paquetes base se pueden usar para indicar paquetes específicos para escanear.
  2. useDefaultFilters : al establecer este atributo en falso (el valor predeterminado es verdadero), puede asegurarse de que Spring no escanee @Component , @Repository , @Service o @Controller automáticamente.
  3. includeFilters : se puede usar para incluir anotaciones de primavera / patrones de expresiones regulares para incluir en el escaneo de paquetes.
  4. excludeFilters : se pueden usar para excluir anotaciones específicas de primavera / patrones de expresiones regulares para incluir en el escaneo de paquetes.

Hay muchos más atributos, pero esos son los más utilizados para personalizar el escaneo de paquetes.

Creando tu propia autoconfiguración.

Spring Boot se basa en muchos proyectos primarios de autoconfiguración prefabricados. Ya debe estar familiarizado con los proyectos de arranque de arranque de primavera.

Puede crear fácilmente su propio proyecto de inicio siguiendo estos sencillos pasos:

  1. Cree algunas clases de @Configuration para definir beans predeterminados. Debe utilizar propiedades externas tanto como sea posible para permitir la personalización y tratar de utilizar las anotaciones del ayudante de configuración automática como @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean etc. Se puede encontrar información más detallada sobre cada anotación en los oficiales documentación anotaciones Estado
  2. Coloque un archivo / archivos de configuración automática que agregue todas las clases de @Configuration .
  3. Cree un archivo llamado spring.factories y colóquelo en src/main/resources/META-INF .
  4. En spring.factories , establezca la propiedad org.springframework.boot.autoconfigure.EnableAutoConfiguration con valores separados por comas de sus clases de @Configuration :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

Usando este método, puede crear sus propias clases de configuración automática que serán seleccionadas por spring-boot. Spring-boot escanea automáticamente todas las dependencias de maven / gradle en busca de un archivo spring.factories , si encuentra uno, agrega todas @Configuration clases de @Configuration especificadas en él a su proceso de configuración automática.

Asegúrese de que su proyecto de inicio de auto-configuration no contenga spring boot maven plugin ya que empaquetará el proyecto como un JAR ejecutable y no será cargado por el classpath como se spring.factories no cargará tu configuración



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow