Czy jest jakaś różnica między użyciem id
atrybutu i name
atrybutu dla <bean>
elementu w pliku konfiguracyjnym Spring?
spring
configuration
Duncan Jones
źródło
źródło
Odpowiedzi:
Ze źródła Spring , 3.2.3.1 Naming Beans :
Zasadniczo więc
id
atrybut jest zgodny ze standardami atrybutów XML id, alename
jest nieco bardziej elastyczny. Ogólnie rzecz biorąc, używamname
prawie wyłącznie. Po prostu wydaje się bardziej „wiosenny”.źródło
Od wiosny 3.1
id
atrybut ma wartośćxsd:string
i pozwala na taki sam zakres znaków, jakname
atrybut.Jedyna różnica między a
id
i aname
polega na tym, że aname
może zawierać wiele aliasów oddzielonych przecinkiem, średnikiem lub białymi spacjami, podczas gdy aid
musi być pojedynczą wartością.Z dokumentacji Spring 3.2:
źródło
Każdy z nich działałby. Zależy to od twoich potrzeb:
jeśli identyfikator fasoli zawiera na przykład znaki specjalne (
/viewSummary.html
), nie będzie dozwolony jako fasolaid
, ponieważ nie jest to prawidłowy identyfikator XML. W takich przypadkach można pominąć zdefiniowanie fasoliid
iname
zamiast tego podać fasolę . Atrybut pomaga w definiowaniu es do fasoli, ponieważ umożliwia określenie wielu identyfikatorów dla danego fasoli.name
alias
źródło
Istnieje kilka drobnych różnic, np. Użycie identyfikatora spowoduje zgłoszenie wyjątku, jeśli nie będzie obsługiwane poprawnie.
pozwól mi odpowiedzieć poniżej pytanie
Nie ma różnicy. ten sam efekt uzyskasz, gdy identyfikator lub nazwa zostaną użyte w znaczniku <bean>.
W jaki sposób?
Zarówno atrybuty id, jak i nazwa dają nam sposób na dostarczenie wartości identyfikatora do komponentu bean (w tej chwili myśl, że identyfikator oznacza identyfikator, ale nie identyfikator). W obu przypadkach zobaczysz ten sam wynik, jeśli zadzwonisz
applicationContext.getBean("bean-identifier");
.Weź @Bean, java równoważnik znacznika <bean>, nie znajdziesz atrybutu id. możesz podać wartość identyfikatora @Bean tylko poprzez atrybut name.
Pozwól, że wyjaśnię to na przykładzie:
weź ten plik konfiguracyjny, nazwijmy go jako spring1.xml
Wiosna zwraca obiekt Foo Bo
Foo f = (Foo) context.getBean("foo");
. Wymieńid="foo"
sięname="foo"
w powyższym spring1.xml, nadal pojawia się ten sam wynik.Zdefiniuj konfigurację XML, np.
Otrzymasz BeanDefinitionParsingException. Powie, że nazwa fasoli „fooIdentifier” jest już używana w tym elemencie. Nawiasem mówiąc, jest to ten sam wyjątek, który zobaczysz, jeśli masz poniżej config
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </bean>
<bean name = "fooIdentifier" class = "com. intertech.Foo "> </bean>
Jeśli zachowasz zarówno identyfikator, jak i nazwę w znaczniku bean, mówi się, że bean ma 2 identyfikatory. możesz uzyskać tę samą fasolę z dowolnym identyfikatorem. weź config jako
następujący kod wypisuje wartość true
źródło
Czy istnieje różnica w definiowaniu identyfikatora i nazwy w pliku XML aplikacji ApplicationContext? Nie Od wersji 3.1 (wiosna) id jest również zdefiniowany jako ciąg typu xsd:. Oznacza to, że wszystkie znaki dozwolone w definicji nazwy są również dozwolone w Id. Nie było to możliwe przed wiosną 3.1.
Po co używać nazwy, gdy jest taka sama jak Id? Jest to przydatne w niektórych sytuacjach, na przykład pozwalając każdemu komponentowi w aplikacji odwoływać się do wspólnej zależności za pomocą nazwy komponentu bean, która jest specyficzna dla samego tego komponentu.
źródło
Zarówno
id
iname
są identyfikatorami fasoli w Spring MKOl pojemnika / ApplicationContecxt.id
Atrybut pozwala określić dokładnie jeden identyfikator, ale przy użyciuname
atrybutu można podać nazwę aliasu do tej fasoli.Tutaj możesz sprawdzić dokument wiosenny .
źródło