Quando uso getBean("test")
Il caso di getbean primavera è o no?
Ho una classe come
@Component
public class TEST {
}
può questo fagiolo essere caricato?
Quando uso getBean("test")
Il caso di getbean primavera è o no?
Ho una classe come
@Component
public class TEST {
}
può questo fagiolo essere caricato?
getBean()
è maiuscole e minuscole, tuttavia Spring usa strategia di denominazione di fagioli personalizzato per @Component
e @Bean
classi. Vedere 4.10.5 Naming autodetected components:
Quando un componente viene riconosciuto automaticamente come parte del processo di scansione, il suo nome di fagioli è generato dal
BeanNameGenerator
strategia [...]. Per impostazione predefinita, qualsiasi annotazione stereotipo Spring (@Component
, ,@Service
e@Controller
) che contiene un valorename
fornirà quindi tale nome alla definizione di bean corrispondente.Se tale annotazione non contiene alcun valore
name
o per qualsiasi altro componente rilevato (come quelli scoperti da filtri personalizzati), il generatore di nomi di fagioli predefinita restituisce l'in minuscolo non qualificato nome della classe.
E per @Configuration
/@Bean
vedere 4.12.4.5 Customizing bean naming:
Per impostazione predefinita, le classi di configurazione utilizzare il nome di un metodo di
@Bean
come il nome del chicco risultante. Questa funzionalità può essere sostituita, tuttavia, con l'attributoname
.
Torna alla tua domanda. Perché la classe non segue le convenzioni Java di denominazione (nomi di cammello e minuscole) Spring usa nome insolito per il fagiolo, questo funzionerà:
getBean("TEST")
Tuttavia, se si utilizza la denominazione prevista (@Component class Test { }
), è necessario utilizzare minuscole identificatori:
getBean("test")
Inoltre se il nome è più complesso, si applica la sintassi cammello caso in minuscolo (continuando a citare il Spring documentation):
[...] Ad esempio, se sono stati rilevati i seguenti due componenti, i nomi sarebbero
myMovieLister
emovieFinderImpl
:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
Grazie Tomasz. È più complesso delle mie aspettative. Se la mia classe è qualcosa di simile alla classe @Component TestTree, posso usare getBean ("testTree") per caricarlo? – user496949
@ user496949: esattamente. In realtà non è complesso. Probabilmente useresti lo stesso nome per una variabile che contiene una classe di tipo 'TestTree'. Inoltre, al giorno d'oggi dovresti usare 'getBean (TestTree.class ') staticamente digitato –
@Component
annotazione utilizza AnnotationBeanNameGenerator
di default che, se non in modo esplicito un nome, utilizzerà Introspector.decapitalize()
metodo sul bean ClassName per ottenere un nome per il bean. Normalmente una classe con un nome come "Test" gli darà il nome di fagiolo "test".Ma decapitalize
ha una curiosità:
Ciò normalmente significa convertire il primo carattere da maiuscolo a minuscole, ma nel (inusuale) caso particolare in cui v'è più di un carattere e entrambi il primo ed il secondo carattere sono maiuscole, lasciamo stare.
Così il vostro class TEST
riceverà il nome del bean TEST
.
Hai provato a caricare il bean in questo modo? –