cuando uso getBean("test")
¿Es positivo o no el caso de Springbean?
que tienen una clase como
@Component
public class TEST {
}
se puede cargar este bean?
cuando uso getBean("test")
¿Es positivo o no el caso de Springbean?
que tienen una clase como
@Component
public class TEST {
}
se puede cargar este bean?
getBean()
es entre mayúsculas y minúsculas, sin embargo primavera utiliza la estrategia de nomenclatura de frijol a medida para @Component
y @Bean
clases. Ver 4.10.5 Naming autodetected components:
Cuando un componente, es detectado como parte del proceso de análisis, su nombre frijol es generado por el
BeanNameGenerator
estrategia [...]. De forma predeterminada, cualquier anotación de estereotipo de primavera (@Component
,@Repository
,@Service
y@Controller
) que contiene un valorname
proporcionará ese nombre a la definición de bean correspondiente.Si una anotación tal contiene ningún valor
name
o por cualquier otro componente detectado (como los descubiertos por filtros personalizados), el generador de nombres de frijol por defecto devuelve el nombre de la clase no cualificado en minúsculas.
Y para @Configuration
/@Bean
ver 4.12.4.5 Customizing bean naming:
Por defecto, las clases de configuración usar el nombre de un método
@Bean
como el nombre del grano resultante. Sin embargo, esta funcionalidad puede anularse con el atributoname
.
Volver a tu pregunta. Debido a que su clase no está siguiendo las convenciones de nombres de Java (nombres de camello caso) Primavera utiliza nombre inusual para el grano, esto va a funcionar:
getBean("TEST")
Sin embargo, si se utiliza nombres esperado (@Component class Test { }
), debe utilizar minúsculas identificadores:
getBean("test")
Por otra parte, si su nombre es más compleja, se aplica la sintaxis de camello caso en minúsculas (continuando por citar el Spring documentation):
[...] Por ejemplo, si se detectaron los siguientes dos componentes, los nombres serían
myMovieLister
ymovieFinderImpl
:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
Gracias Tomasz. Es más complejo de lo que esperaba. Si mi clase es algo así como @Component class TestTree, ¿puedo usar getBean ("testTree") para cargarlo? – user496949
@ user496949: exactamente. En realidad, no es complejo. Probablemente usaría el mismo nombre para una variable que contenga una clase de tipo 'TestTree'. Además, debería usar 'getBean (TestTree.class)' estáticamente tipeado 'hoy en día –
@Component
anotación utiliza AnnotationBeanNameGenerator
de forma predeterminada que, si no se da explícitamente un nombre, utilizará Introspector.decapitalize()
método en el bean ClassName para obtener un nombre para el bean. Normalmente, una clase con un nombre como "Test" le dará el nombre "prueba".Pero decapitalize
tiene una curiosidad:
Esto normalmente significa convertir el primer carácter de mayúsculas a minúsculas, pero en el caso especial (inusual) cuando no es más que un personaje y el primer y segundo caracteres son mayúsculas, lo dejamos solo.
De modo que su class TEST
recibirá el nombre de bean TEST
.
¿Has probado load bean como este? –