your type test springboot scan example ejemplo defining context consider componentscan component bean java spring annotations

java - type - ¿Cómo escanear varias rutas usando la anotación @ComponentScan?



spring @component (5)

Existe otra alternativa de tipo seguro para especificar una ubicación de paquete base como String. Ver la API aquí , pero también he ilustrado a continuación:

@ComponentScan(basePackageClasses = {ExampleController.class, ExampleModel.class, ExmapleView.class})

Usar el especificador basePackageClasses con las referencias de clase le dirá a Spring que escanee esos paquetes (al igual que las alternativas mencionadas), pero este método es seguro para ambos tipos y agrega soporte IDE para futuras refactorizaciones, una gran ventaja en mi libro.

Al leer de la API, Spring sugiere crear una clase de marcador no operativa o interfaz en cada paquete que desea escanear, que no sirve para otro propósito que no sea el de ser utilizado como referencia para / por este atributo.

OMI, no me gustan las clases de marcadores (pero, una vez más, son casi como las clases de información del paquete), pero el tipo de seguridad, el soporte IDE y la reducción drástica de la cantidad de paquetes base necesarios para incluir en este escaneo es, sin lugar a dudas, una opción mucho mejor.

Estoy usando Spring 3.1 y ejecutando una aplicación usando los atributos @Configuration y @ComponentScan .

El comienzo real se hace con

new AnnotationConfigApplicationContext(MyRootConfigurationClass.class);

Esta clase de configuración está anotada con

@Configuration @ComponentScan("com.my.package") public class MyRootConfigurationClass

y esto funciona bien Sin embargo, me gustaría ser más específico sobre los paquetes que escaneo, así que lo intenté.

@Configuration @ComponentScan("com.my.package.first,com.my.package.second") public class MyRootConfigurationClass

Sin embargo, esto falla con errores que me dicen que no puede encontrar componentes especificados utilizando la anotación @Component .

¿Cuál es la forma correcta de hacer lo que estoy buscando?

Gracias


Otra forma de hacerlo es usar el campo basePackages ; que es un campo dentro de la anotación ComponentScan.

@ComponentScan(basePackages={"com.firstpackage","com.secondpackage"})

Si observa la clase de anotación ComponentScan del archivo jar, verá un campo basePackages que toma una matriz de cadenas

public @interface ComponentScan { String[] basePackages() default {}; }


Proporcione su nombre de paquete por separado, requiere una String[] para los nombres de los paquetes.

En lugar de esto:

@ComponentScan("com.my.package.first,com.my.package.second")

Utilizar esta:

@ComponentScan({"com.my.package.first","com.my.package.second"})


Utiliza ComponentScan para escanear múltiples paquetes usando

@ComponentScan({"com.my.package.first","com.my.package.second"})


@ComponentScan usa una matriz de cadenas, como esta:

@ComponentScan({"com.my.package.first","com.my.package.second"})

Cuando proporciona múltiples nombres de paquete en una sola cadena, Spring lo interpreta como un nombre de paquete y, por lo tanto, no puede encontrarlo.