Javax.inject.Named ek açıklamanın ne için kullanılması gerekiyor?


114

javax.injectPaketi anlamaya çalışıyorum ve javax.inject.Namedek açıklamanın ne için kullanılması gerektiği konusunda net değilim . Javadoc, arkasındaki fikri açıklamıyor.

Javadoc, http://download.oracle.com/javaee/6/api/javax/inject/Named.html adresindedir.

Bazı örnek programlar yazmak için Spring 3.0 kullanıyorum @Named, bir fasulye koyarak onu fasulye fabrikasına ekliyor gibi görünüyor, ancak Javadoc tanımı o kadar hafif ki bunun standart davranış mı yoksa Spring'e özgü davranış mı olduğunu anlayamıyorum.

Sorularım:

  1. Arasındaki fark nedir @Namedve@Qualifier
  2. Runtime sistemine bir sınıfın diğer sınıflarda enjekte edilebilir olması gerektiğini nasıl söyleyeceksiniz, bunun için ek açıklama nedir? Bahardaki eşdeğeri @Component?

1'i güncelle orada mükemmel bir açıklamasıdır @Namedve @Qualifieryaklaşık Güzel makalesine @Namedve @Qualifier https://dzone.com/articles/java-ee6-cdi-named-components teşekkürler yorumunuz aşağıda kendisine bağlamak için @xmedeko.


JSR-330 yapılandırması spesifikasyonun dışında, yani konteynere özel.
Thorbjørn Ravn Andersen

1
Spring belgelerine göre "JSR 330'un @Named notasyonu, hem bileşenleri algılamak hem de onlara bir ad vermek için bir araç olarak kullanılabilir. Sınıf yolunda JSR 330 JAR varsa, bu davranış otomatik olarak etkinleştirilir." Bu davranış spring'e mi yoksa @ Name'i anlayan tüm kapsayıcılara özgü mü?
ams

Yanıtlar:


87

Aynı kapsamdaki aynı türdeki farklı nesneler arasında ayrım yapmak @Namediçin kullanın .

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

Niteleyici olmadan, @Namedenjektör hangi değişkene hangi süre boyunca bağlanacağını bilemezdi.

  • Gibi davranan ek açıklamalar oluşturmak istiyorsanız @Named, @Qualifierek açıklamaları oluştururken kullanın .

  • Eğer bakarsak @Named, bu kendisi ile ilgili açıklamalı olduğunu @Qualifier.


Öyleyse @ İsim gerçekten @Qualifier'dır, öyleyse neden @Qualifier'ın bu kadar genel olması gerekiyor, javax.inject kullanan birinin @ Repository, @ Service, @ Controller gibi @Qualifier olarak işaretlenmiş stereotipleri tanımlamasına izin verme fikri mi?
ams

Basmakalıplar hakkında ne demek istediğinden emin değilim. Aynı Türün farklı örneklerini ayırt etmek için yeni ek açıklamalar eklemeyi kastediyorsanız, evet.
köprüler

Örneğin @Named ("maxWaitTime") yerine @MaxWaitTime olabilir. Sadece biraz daha temiz.
sourcedelica


Anlamıyorum ... aralarındaki farkı farklı değişken isimleriyle söyleyemez misiniz?
CodyBugstein

64

@InjectBaharın @Autowiredbir fasulyeyi enjekte etmesi yerine .
@NamedBaharın @Componentbir fasulye ilan etmesi yerine .

Şunlar JSR-330 standart ek açıklamaları, Bahar açıklamasında olduğu gibi taranır ve alınır (aşağıdakiler jarsınıf yolunuzda olduğu sürece )


"Fasulye enjekte et" ifadesi belirsizdir; "Bu fasulyenin tüm bağımlılıklarını tatmin et" mi demek istiyorsun yoksa "o fasulyeyi bağımlılık yapan bir şeye enjekte et" mi demek istiyorsun?
Andrew Swan

Bahar ek açıklamalarının JSR karşılıklarının listesini nerede bulabilirim?
Pawan

bir fasulyeyi enjekte edin - "o fasulyeyi bağımlılığı olan bir şeye enjekte edin"
Nadav Bitiş

Üzgünüm Pawan, bahar ek açıklamasına karşılık gelen JSR listesine aşina değilim
Nadav Bitiş

8

# 2 ile ilgili olarak, JSR-330 spesifikasyonuna göre:

Bu paket, taşınabilir sınıfları etkinleştiren bağımlılık ekleme ek açıklamaları sağlar, ancak enjektör uygulamasına kadar harici bağımlılık yapılandırmasını bırakır.

Bu nedenle, hangi nesnelerin enjeksiyon için uygun olduğunu belirlemek sağlayıcıya kalmıştır. İlkbahar durumunda, hepsi Bahar fasulyesidir. Ve JSR-330 ek açıklamaları ile not verilen tüm sınıflar, AnnotationConfigApplicationContext kullanılırken otomatik olarak Bahar fasulyesi olarak eklenir.


5

@Named açıklamasının birincil rolü, uygulama içindeki EL ifadelerini genellikle JSF EL çözümleyicileri aracılığıyla çözmek amacıyla bir bean tanımlamaktır. Enjeksiyon isimler kullanılarak yapılabilir, ancak CDI'da enjeksiyonun işe yaraması bu değildi, çünkü CDI bize enjeksiyon noktalarını ve bunlara enjekte edilecek fasulyeleri ifade etmek için çok daha zengin bir yol sunuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.