Próbuję zrozumieć javax.inject
pakiet i nie wiem, co tojavax.inject.Named
ma służyć adnotacja. Javadoc nie wyjaśnia stojącej za nim idei.
Javadoc jest dostępny pod adresem http://download.oracle.com/javaee/6/api/javax/inject/Named.html
Używam Springa 3.0 do napisania kilku przykładowych programów, zakładając @Named
ziarno, które wydaje się dodawać je do fabryki fasoli, ale opis Javadoc jest tak lekki, że nie mogę powiedzieć, czy jest to standardowe zachowanie, czy zachowanie specyficzne dla Springa.
Moje pytania to:
- Jaka jest różnica pomiędzy
@Named
i@Qualifier
- Jak masz powiedzieć systemowi Runtime, że klasa powinna być wstrzykiwana w innych klasach, jaka jest adnotacja do tego? Odpowiednik
@Component
wiosny?
W aktualizacji 1 znajduje się doskonałe wyjaśnienie @Named
i @Qualifier
w ładnym artykule na temat, @Named
a @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components dzięki @xmedeko za połączenie z nim poniższego komentarza.
Odpowiedzi:
Służy
@Named
do rozróżniania różnych obiektów tego samego typu, powiązanych w tym samym zakresie.Bez
@Named
kwalifikatora iniektor nie wiedziałby, przez jaki czas związać się z którą zmienną.Jeśli chcesz tworzyć adnotacje, które zachowują się jak
@Named
, użyj@Qualifier
adnotacji podczas ich tworzenia.Jeśli spojrzysz na
@Named
to, sam jest oznaczony@Qualifier
.źródło
@Named
i@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
zamiast Springa@Autowired
wstrzyknąć fasolę.@Named
zamiast wiosny@Component
ogłosić fasolę.Te standardowe adnotacje JSR-330 są skanowane i pobierane w taki sam sposób jak adnotacje wiosenne (o ile
jar
w ścieżce klas znajduje się poniższy kod)źródło
Odnośnie nr 2, zgodnie ze specyfikacją JSR-330:
Zatem dostawca może określić, które obiekty są dostępne do wstrzyknięcia. W przypadku wiosny to cała wiosenna fasola. Każda klasa z adnotacjami JSR-330 jest automatycznie dodawana jako fasola Spring podczas używania AnnotationConfigApplicationContext.
źródło
Podstawową rolą adnotacji @Named jest zdefiniowanie komponentu bean w celu rozwiązywania instrukcji EL w aplikacji, zwykle za pomocą resolwerów JSF EL. Iniekcję można wykonać przy użyciu nazw, ale nie tak miało działać iniekcja w CDI, ponieważ CDI daje nam znacznie bogatszy sposób wyrażania punktów wtrysku i ziaren, które mają być do nich wstrzyknięte.
źródło