kiedy używam getBean("test")
Czy skrzynia getbean jest sprężysta, czy nie?
Mam klasy jak
@Component
public class TEST {
}
to może być załadowany fasoli?
kiedy używam getBean("test")
Czy skrzynia getbean jest sprężysta, czy nie?
Mam klasy jak
@Component
public class TEST {
}
to może być załadowany fasoli?
getBean()
jest wielkość liter, jednak wiosna używa niestandardowej strategii nazewnictwa fasoli dla @Component
i @Bean
klas. Zobacz 4.10.5 Naming autodetected components:
Gdy składnik jest wykrywana jako część procesu skanowania, jego nazwa fasoli są generowane przez strategię
BeanNameGenerator
[...]. Domyślnie każda adnotacja z wiosennym stereotypem (@Component
,@Repository
, i@Controller
), która zawiera wartośćname
, dostarczy tę nazwę do odpowiedniej definicji komponentu bean.Jeśli taka adnotacja zawiera żadnej wartości
name
lub w jakimkolwiek innym wykrytego składnika (takie jak te odkryte przez filtry niestandardowe), to Domyślna nazwa fasola generator zwraca uncapitalized zakaz nazwę klasy.
I @Configuration
/@Bean
zobaczyć 4.12.4.5 Customizing bean naming:
Domyślnie klas konfiguracji używać nazwy danego
@Bean
metodę jako nazwę wynikowego fasoli. Funkcję tę można jednak zastąpić atrybutemname
.
Powrót do pytania. Ponieważ klasa nie obserwuje nazewnictwa Java (nazwy camel-CASE) Wiosna wykorzystuje niezwykłą nazwę fasoli, to będzie działać:
getBean("TEST")
Jednak jeśli używasz oczekiwaną nazewnictwa (@Component class Test { }
), należy użyć małymi literami identyfikatory:
getBean("test")
Ponadto jeśli nazwa jest bardziej złożone, dotyczy uncapitalized składnia wielbłądziej przypadek (kontynuując zacytować Spring documentation):
[...] Na przykład, jeśli wykryto następujące dwa elementy, nazwy byłoby
myMovieLister
imovieFinderImpl
:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
Dzięki Tomasz. Jest bardziej skomplikowany niż moje oczekiwania. Jeśli moja klasa jest podobna do klasy TestTree klasy @Component, czy mogę użyć getBean ("testTree"), aby ją załadować? – user496949
@ user496949: dokładnie. W rzeczywistości nie jest to skomplikowane. Prawdopodobnie użyjesz tej samej nazwy dla zmiennej posiadającej klasę typu "TestTree". Ponadto powinieneś używać statycznie wpisanego 'getBean (TestTree.class)' obecnie –
@Component
adnotacja wykorzystuje AnnotationBeanNameGenerator
domyślnie, które, jeśli nie są wyraźnie podane nazwisko, użyje Introspector.decapitalize()
metodę na fasoli ClassName, aby uzyskać nazwę komponentu bean. Zwykle klasa o nazwie "Test" nadaje jej nazwę "test".Ale decapitalize
ma ciekawość:
zwykle oznacza to przekształcenie pierwszego znaku od górnej przypadku do małe litery, ale w (nietypowy) szczególnym przypadku, gdy istnieje więcej niż jeden znak i zarówno pierwszy jak i drugi znaków są duże litery, zostawiamy to w spokoju.
Twój class TEST
otrzyma nazwę fasoli TEST
.
Czy próbowałeś załadować fasolę w ten sposób? –