Inject and Resource and Autowired adnotations
Jaka jest różnica między @Inject
i @Resource
A @Autowired
adnotacjami?
3 answers
Różnica między @ Inject vs. @ Autowire vs. @ Resource?
@Autowired: adnotacja właściwościowa springa (w przeciwieństwie do @Inject i @Resource), która wstrzykuje zasób według typu, tzn. według klasy interfejsu pola z adnotacją lub wykonawcy. W przypadku, gdy mamy kilka implementacji interfejsu lub podklasy, możemy zawęzić wybór za pomocą adnotacji @ Qualifier, aby uniknąć niejednoznaczności. W przypadku meczu rezerwowego nazwa fasoli jest uważana za domyślną kwalifikację wartość. Chociaż możesz użyć tej konwencji, aby odnieść się do konkretnych fasoli po nazwie, @Autowired zasadniczo dotyczy wtrysku typu z opcjonalnymi kwalifikatorami semantycznymi.
@Inject: Adnotacja oparta na JSR - 330 (Dependency Injection for Java) identyfikuje wstrzykiwalne konstruktory, metody i pola. Ta adnotacja jest prawie kompletnym zamiennikiem adnotacji Springa @ Autowired. Zamiast używać adnotacji @Autowired specyficznej dla wiosny, możesz wybrać użyj @Inject. Jedną z różnic między @Autowired i @Inject jest to, że @ Inject nie ma wymaganego pola, więc w przypadku, gdy nie znajdziemy odpowiedniego obiektu do inject, nie powiedzie się, podczas gdy @Autowired może użyć required=false i zezwolić na pole null (tylko jeśli jest wymagane!). Zaletą adnotacji @ Inject jest to, że zamiast wstrzykiwać odniesienie bezpośrednio, możesz poprosić @Inject o wstrzyknięcie dostawcy. Interfejs Provider umożliwia m.in. z wielu instancji fasoli. W przypadku, gdy mamy kilka implementacji interfejsu lub podklasy, możemy zawęzić wybór za pomocą adnotacji @ Named, aby uniknąć niejednoznaczności. @Named annotation działa podobnie jak Spring ' s @Qualifier
@Źródło: adnotacja oparta na JSR-250. @Resource jest dość podobny do @Autowired i @Inject, ale główną różnicą jest ścieżka wykonania pobrana, aby znaleźć wymaganą bean do inject. @ Resource zawęzi wyszukiwanie po nazwie następnie przez typ i na koniec przez kwalifikatory(ignorowane, jeśli dopasowanie zostanie znalezione po nazwie). @Autowired i @Inject zawężą wyszukiwanie najpierw przez typ, następnie przez kwalifikator, a na końcu przez nazwę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 18:31:44
|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
Więc w Spring dependency injection @Inject
i @Autowired
mają dokładnie takie samo zachowanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 09:57:59
Oprócz @Haim answer jest dobry opis różnicy między adnotacjami Spring i JSR-330 (Dependency Injection for Java) i jak używać ostatniego Z Spring.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 16:42:54