Spring yapılandırma dosyasındaki bir öğede id
öznitelik ve name
öznitelik kullanma arasında bir fark var mı <bean>
?
Spring yapılandırma dosyasındaki bir öğede id
öznitelik ve name
öznitelik kullanma arasında bir fark var mı <bean>
?
Yanıtlar:
Kaynaktan Yay referans , 3.2.3.1 Adlandırma Fasulye :
Her fasulyenin bir veya daha fazla kimliği vardır (tanımlayıcılar veya adlar da denir; bu terimler aynı şeye işaret eder). Bu kimlikler, fasulyenin barındırdığı kap içinde benzersiz olmalıdır. Fasulye neredeyse her zaman sadece bir kimliğe sahip olacaktır, ancak bir fasulyenin birden fazla kimliği varsa, ekstra olanlar esasen takma ad olarak kabul edilebilir.
XML tabanlı yapılandırma meta verilerini kullanırken, çekirdek tanımlayıcılarını belirtmek için 'id' veya 'name' niteliklerini kullanırsınız. 'İd' özniteliği, tam olarak bir kimlik belirtmenize olanak tanır ve gerçek bir XML öğesi kimliği özniteliği olduğundan, diğer öğeler kimliğe başvurduğunda XML ayrıştırıcısı bazı ekstra doğrulama yapabilir; bu nedenle, bir fasulye kimliği belirtmenin tercih edilen yoludur. Ancak, XML belirtimi, XML kimliklerinde yasal olan karakterleri sınırlandırmaz. Bu genellikle bir kısıtlama değildir, ancak bu özel XML karakterlerinden birini kullanmaya ihtiyacınız varsa veya çekirdeğe başka takma adlar eklemek istiyorsanız, virgülle ayrılmış bir veya daha fazla fasulye kimliği de belirtebilirsiniz (, ), noktalı virgül (;) veya 'name' özniteliğindeki boşluktan oluşur.
Temelde id
öznitelik XML kimliği öznitelik standartlarına uygundur, oysa name
biraz daha esnektir. Genel olarak, name
neredeyse sadece kullanıyorum. Daha çok "Bahar-y" gibi görünüyor.
İlkbahar 3.1'den beri, id
öznitelik bir xsd:string
ve öznitelikle aynı karakter aralığına izin verir name
.
Bir arasındaki tek fark, id
ve name
bir yani name
bir oysa bir virgül, noktalı veya boşluk ile ayrılmış birden çok takma içerebilir id
tek bir değer olmalıdır.
İlkbahar 3.2 belgelerinden:
XML tabanlı yapılandırma meta verilerinde, çekirdek tanımlayıcılarını belirtmek için id ve / veya ad özniteliklerini kullanırsınız. İd özelliği, tam olarak bir kimlik belirtmenize olanak tanır. Geleneksel olarak bu adlar alfasayısaldır ('myBean', 'fooService' vb.), Ancak özel karakterler de içerebilir. Çekirdeğe başka takma adlar eklemek isterseniz, bunları virgül (,), noktalı virgül (;) veya boşlukla ayırarak ad özelliğinde de belirtebilirsiniz. Tarihsel bir not olarak, Bahar 3.1'den önceki sürümlerde, id niteliği, olası karakterleri kısıtlayan bir xsd: ID olarak yazılmıştır. 3.1 itibariyle, şimdi xsd: string. Fasulye kimliği benzersizliğinin kapsayıcı tarafından yine de uygulandığını, ancak artık XML ayrıştırıcıları tarafından uygulanmadığını unutmayın.
İkisi de işe yarar. İhtiyaçlarınıza bağlıdır:
Fasulye tanımlayıcı örneğin ( /viewSummary.html
) için özel karakterler içeriyorsa id
, geçerli bir XML kimliği olmadığı için fasulye olarak izin verilmez . Bu gibi durumlarda, fasulyeyi tanımlamayı atlayabilir id
ve name
onun yerine fasulyeyi besleyebilirsiniz. Özellik ayrıca tanımlanmasında yardımcı olur verilen bir fasulye için birden tanımlayıcıları belirterek sağlar, çünkü senin fasulye için es.name
alias
<bean> etiketinde id özelliği ve name özelliği kullanma arasında herhangi bir fark var mı
Birkaç küçük fark var, id kullanıldığında düzgün kullanılmazsa istisna atar.
aşağıdaki soruya cevap vereyim
Bir id niteliğini kullanma ile <bean> etiketinde ad niteliği kullanma arasında herhangi bir fark var mı ,
Fark yok. bir <bean> etiketinde id veya name kullanıldığında aynı etkiyle karşılaşırsınız.
Nasıl?
Hem id hem de name öznitelikleri bize bir çekirdeğe tanımlayıcı değer sağlamak için bir araç sağlıyor (Bu an için id'nin id anlamına gelir, ancak tanımlayıcı değil). Her iki durumda da, arama yaparsanız aynı sonucu görürsünüz applicationContext.getBean("bean-identifier");
.
<bean> etiketinin java eşdeğeri @Bean'ı alırsanız, bir kimlik özelliği bulamazsınız. tanımlayıcı değerinizi @adean'a yalnızca ad özelliği ile verebilirsiniz.
Bir örnekle açıklayayım:
Bu yapılandırma dosyasını alın, onu spring1.xml olarak adlandıralım
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="foo" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
Bahar, Foo nesnesini için döndürür Foo f = (Foo) context.getBean("foo");
. Yukarıdaki spring1.xml id="foo"
ile değiştirin name="foo"
, yine de aynı sonucu göreceksiniz.
Xml yapılandırmanızı aşağıdaki gibi tanımlayın:
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="fooIdentifier" class="com.intertech.Foo"></bean>
<bean name="fooIdentifier" class="com.intertech.Foo"></bean>
</beans>
BeanDefinitionParsingException alacaksınız. Şunu söyleyecektir, Bean öğesi 'fooIdentifier' bu öğede zaten kullanılıyor. Bu arada, config
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </bean>
<bean name = "fooIdentifier" class = "com altında olup olmadığınızı göreceksiniz. intertech.Foo "> </bean>
Fasulye etiketine hem id hem de isim koyarsanız, fasulyenin 2 tanımlayıcısı olduğu söylenir. herhangi bir tanımlayıcı ile aynı fasulyeyi alabilirsiniz. yapılandırmayı şu şekilde al
<?xml version="1.0" encoding="UTF-8"?><br>
<beans ...>
<bean id="fooById" name="fooByName" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
aşağıdaki kod doğru yazdırılıyor
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(...);
Foo fooById = (Foo) context.getBean("fooById")// returns Foo object;
Foo fooByName = (Foo) context.getBean("fooByName")// returns Foo object;
System.out.println(fooById == fooByName) //true
ApplicationContext xml dosyasında Id ve name tanımlamasında fark var mı? Hayır 3.1 (yay) itibarıyla id, xsd: string türü olarak da tanımlanır. Bu, Kimlik tanımında ad tanımlanmasına izin verilen karakterlere de izin verildiği anlamına gelir. Bu, Bahar 3.1'den önce mümkün değildi.
Neden Id ile aynı olduğunda adı kullanmalıyım? Bir uygulamadaki her bileşenin, söz konusu bileşenin kendisine özgü bir fasulye adı kullanarak ortak bir bağımlılığa başvurmasına izin vermek gibi bazı durumlar için yararlıdır.
For example, the configuration metadata for subsystem A may refer to a DataSource via the name subsystemA-dataSource. The configuration metadata for subsystem B may refer to a DataSource via the name subsystemB-dataSource. When composing the main application that uses both these subsystems the main application refers to the DataSource via the name myApp-dataSource. To have all three names refer to the same object you add to the MyApp configuration metadata the following
<bean id="myApp-dataSource" name="subsystemA-dataSource,subsystemB-dataSource" ..../>
Alternatively, You can have separate xml configuration files for each sub-system and then you can make use of
alias to define your own names.
<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />
Hem id
ve name
Spring IOC kap / ApplicationContecxt bean belirleyicileridir. id
Özniteliği tam olarak bir id ancak kullanarak belirtmenizi sağlar name
o fasulye için takma ad verebilirsiniz özellik.
Bahar doktorunu buradan kontrol edebilirsiniz .