Jaka jest różnica pomiędzy adnotacjami @Inject
i @Resource
i @Autowired
?Adnotacje Inject i Resource oraz Autowired
Kiedy powinniśmy użyć każdego z nich?
Jaka jest różnica pomiędzy adnotacjami @Inject
i @Resource
i @Autowired
?Adnotacje Inject i Resource oraz Autowired
Kiedy powinniśmy użyć każdego z nich?
Różnica między @Inject vs. @Autowire vs. @Resource?
@Autowired: sprężyna poprawność adnotacji (w przeciwieństwie do @Inject i @Resource), które wtryskiwać zasobu ubocznych typu, to jest przez klasę przez interfejs pola opatrzony lub wykonawcy. W przypadku kilku implementacji interfejsu lub podklasy możemy zawęzić wybór za pomocą adnotacji @Qualifier, aby uniknąć niejasności. W przypadku dopasowania rezerwowego nazwa komponentu bean jest uważana za domyślną wartość kwalifikatora. Mimo że możesz użyć tej konwencji, aby odnosić się do konkretnych fasoli po imieniu, @Autowired jest zasadniczo oparty na zastrzyku sterowanym typem z opcjonalnymi semantycznymi kwalifikatorami.
@Inject: Adnotacja na podstawie JSR-330 (Dependency Injection for Java) identyfikuje konstruktorów do wstrzyknięć, metod i pól. Ta adnotacja to niemal zupełny zamiennik adnotacji Spring @Autowired. Zamiast więc używać adnotacji @ specyficznej dla Springa, możesz użyć @Inject. Jedną z różnic między @Aemowired i @Inject jest to, że @Inject nie ma wymaganego pola, więc na wypadek, gdybyśmy nie znaleźli odpowiedniego obiektu do wstrzyknięcia, to się nie powiedzie, podczas gdy @Acjowired może użyć required = false i zezwolić na puste pole (tylko Jeśli wymagane!). Zaletą adnotacji @Inject jest to, że zamiast bezpośrednio wstrzykiwać referencję, możesz poprosić @Inject o wstrzyknięcie dostawcy. Interfejs dostawcy umożliwia między innymi leniwe wstrzykiwanie odniesień do ziaren i wstrzykiwanie wielu wystąpień komponentu bean. Jeśli mamy kilka implementacji interfejsu lub podklasy, możemy zawęzić wybór za pomocą @Named adnotation, aby uniknąć niejasności. @ Notowana adnotacja działa podobnie jak Spring's @Qualifier
@Resource: adnotacja oparta na JSR-250. @Resource jest bardzo podobny do @Autowired i @Inject, ale główna różnica polega na ścieżkach wykonania, które są potrzebne do znalezienia wymaganej fasoli do wstrzyknięcia. @Resource zawęzi wyszukiwanie najpierw według nazwy, a następnie według typu i na końcu według kwalifikatorów (ignorowane, jeśli dopasowanie zostanie znalezione po nazwie). @Aemowired i @Inject zawęzić wyszukiwanie najpierw według typu, a następnie kwalifikatora i na końcu według nazwy.
Czy możesz powiedzieć coś o co jest zalecane? Najlepsze praktyki? –
Z przyjemnością odpowiem na Twój komentarz, ale wolę zachować tę odpowiedź w niezmienionej postaci. Czy opublikujesz nowe pytanie? –
W ostatniej linii wspomniałeś @Autowired również wyszukiwanie według nazwy, ponieważ wiem, że nie ma opcji nazwy, prawda? –
Oprócz @Haim, należy odpowiedzieć na there is good description różnicę między adnotacjami Spring i JSR-330 (Dependency Injection for Java) i jak korzystać z ostatniego z Spring.
|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-standard-annotations, http://docs.spring.io /spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-resource-annotation –
możliwy duplikat [@Resource vs @Apiowired] (http://stackoverflow.com/questions/4093504/resource -vs-autowired) –
Dobre wyjaśnienie z przykładami, które znalazłem, jest [tutaj] (http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/) – marioosh