W innym numerze question zadałem pytanie, że struktura wiosna nie jest bezpieczna. Czy jest to prawda, czy naprawione i czy możesz podać przykład, co to dokładnie oznacza?to wiosenna wersja 3.0, bezpieczna dla typów
Odpowiedz
Przede wszystkim, co oznacza "bezpieczny dla typu" oznacza dla schematu wtrysku zależności. Mogę myśleć o tym, że można pobrać komponent bean z kontekstu, określając typ, a nie tylko nazwę komponentu bean. Spring 3 pozwala na to.
W przeciwnym razie, bezpieczeństwo typu oznacza, że kiedy można zdefiniować zależności według ich typu. I możesz to zrobić we wszystkich wersjach wiosny.
Kolejną kwestią jest bezpieczeństwo podczas kompilacji. Ze sprężyną pre-3.0, kiedy trzeba było rozróżnić dwa ziarna, które mają ten sam interfejs (lub nadmiarowy), używając nazwy opartej na łańcuchach. Wiosną 3.0 można używać kwalifikatorów opartych na adnotacjach (przy użyciu javax.inject.Qualifier
), więc jest to również bezpieczniejsze w czasie kompilacji.
Należy jeszcze wspomnieć o zastosowaniu leków generycznych. Możesz mieć na przykład wiosnę @Inject List<MyService>
.
To zależy od tego, jak go używasz i co masz na myśli, mówiąc o bezpiecznym typie (patrz odpowiedź Bozho, aby uzyskać więcej informacji na temat tego ostatniego): jeśli użyjesz konfiguracji xml do produkcji swoich ziaren, to prawdopodobnie będziesz bezpieczny po uruchomieniu.
Jeśli jednak używasz nowej konfiguracji Java Bean (która ma swoje własne ograniczenia), uzyskasz bezpieczeństwo podczas kompilacji.
Nie jestem zwolennikiem tego drugiego nad pierwszym, ale jest to coś do rozważenia.
Definiowanie niestandardowego adnotacji przy użyciu @Qualifier
Aby zidentyfikować wstrzykuje fasoli bez określania nazwy, musimy utworzyć niestandardowe adnotacji. Jest to procedura równoważna z użyciem adnotacji JSR 330 (Inject) w CDI.
@Target({ElementType.Field, ElementType.Parameter})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @Interface Student {
}
teraz przypisać ten niestandardowy adnotacji do realizacji EntityDao interfejsu
@Component
@Student
public class StudentDao implements EntityDao {
}
@Component mówi sprężynę tej definicji fasoli. @ Adnotacja studyjna jest używana przez Spring IoC do identyfikacji realizacji StudentDao jako EntityDao przy każdym użyciu odwołania do EntityDao. Wstrzyknij fasolę za pomocą @Autowired i custom qualifier Coś takiego.
@Autowired
@Student
private EntityDao studentDao; // So the spring injects the instance of StudentDao here.
W ten sposób mniej używa się nazw łańcuchów, które mogą być błędnie napisane i trudniejsze w utrzymaniu. - Uważam, że ten post jest bardzo przydatny. http://www.coolcoder.in/2011/08/how-to-use-type-safe-dependency.html
- 1. Nadchodzące książki o jądrze Linux (wersja 3.0+)?
- 2. Bezpieczna alternatywa dla częściowych rekordów?
- 3. Bezpieczna pamięć dla obiektów Swift
- 4. Wiosenna integracja - Współbieżne aktywatory usług
- 5. swift 3.0 Data to String?
- 6. Dlaczego przy korzystaniu z typów tablic nie jest bezpieczna dla java?
- 7. stringByReplacingOccurencesOfString() dla Swift 3.0
- 8. Wiosenna wtyczka IDE kontra STS: porównanie funkcji dla wersji 3.3.0
- 9. Czy istnieje bezpieczna alternatywa dla std :: equal?
- 10. Wiosenna partia i integracja
- 11. Aktualizacja symfony do wersji 3.0 - zła wersja dystrybucji dystrybucyjnej
- 12. Co to jest wersja cron dla systemu Windows?
- 13. Wymagana jest wersja 2.10 Gradle. Aktualna wersja to 2.8 błędach
- 14. Jak ukryć pasek akcji (Theme.Holo), czy wersja Androida poniżej 3.0
- 15. Wiosenna chmura - SQS
- 16. Biblioteka typów typów danych dla C
- 17. typów parametrów dla obiektów typu, że to jest zdefiniowane
- 18. Wiosenna fasola Clojure
- 19. Bezpieczna dla wątków implementacja GetTickCount64 dla systemu Windows XP
- 20. sizeof() operator dla typów
- 21. Subversion: Kopia robocza to stara wersja rozwojowa
- 22. Rozszerzanie typów dla PHP
- 23. CS1607: Wersja określona dla „wersja pliku” nie jest w normalnym formacie „major.minor.build.revision” w .NET
- 24. REST API dla Joomla 3.0
- 25. Bezpieczna kontrola wersji
- 26. Równość dla typów anonimowych
- 27. typeid dla polimorficznych typów
- 28. Co to jest wersja C++ Java ArrayList
- 29. Co to jest wersja Android TextArea HTML?
- 30. Czy java jest bezpieczna?
To pytanie byłaby dużo bardziej pomocne, jeśli lepiej zdefiniowane, co oznaczało według typu bezpieczny, czego szukasz w ramach DI itp –
@matt B - prosił pytanie ("to, co jest typu-safe ") do osoby, która powiedziała, że wiosna nie jest bezpieczna, w połączonym pytaniu. Ale odpowiedź nie została otrzymana, stąd to pytanie. – Bozho
ah Widzę, teraz ma więcej sensu. Usunąłem moje poparcie –