Natknąłem się na to link, które wyjaśnia, w jaki sposób można dziedziczyć dziedziczenie. Zakładając, że klasa HelloWorld w tym przykładzie jest wyeksponowana jako komponent bean przy użyciu adnotacji @Component, w jaki sposób można utworzyć inny komponent bean, który dziedziczy ten komponent bean? Czy mogę używać rozszerzeń do dziedziczenia fasoli HelloWorld i dodawania @Component do nowej klasy, aby rozszerzyć istniejący komponent bean, aby odsłonić go jako nowy komponent bean z dodatkowymi funkcjami?Dziedziczenie wiosny - Adnotacja
Odpowiedz
Najpierw trzeba dokonać abstrakcyjnej konfigurację , co osiąga się przez nie oznaczając go jako @Configuration
, tak:
// notice there is no annotation here
public class ParentConfig {
@Bean
public ParentBean parentBean() {
return new ParentBean();
}
}
następnie rozszerzyć ją tak:
@Configuration
public class ChildConfig extends ParentConfig {
@Bean
public ChildBean childBean() {
return new ChildBean();
}
}
Wynik będzie dokładnie taki sam, jak w przypadku wykonania tej czynności:
@Configuration
public class FullConfig {
@Bean
public ParentBean parentBean() {
return new ParentBean();
}
@Bean
public ChildBean childBean() {
return new ChildBean();
}
}
Edytuj: odpowiedź na pytanie uzupełniające w komentarzu.
Jeśli Wiosna podnosi obie klasy, rodzica i dziecka, nie będzie problemów z powielanych fasoli, więc nie można przedłużyć go bezpośrednio. Nawet jeśli nadpiszesz metody, ziarna z super-klasy również zostaną utworzone przez ParentConfig
.
Od klasa dominująca jest już skompilowany, masz 2 opcje:
porozmawiać z autorką klasy nadrzędnej i uprzejmie poprosić go, aby go zmienić.
Zmiana pakietów
@ComponentScan
.
Aby wyjaśnić na Rozwiązanie 2:
Jeśli klasa dominująca jest w opakowaniu com.parent.ParentConfig
a klasa dziecko jest pakiet com.child.ChildConfig
można skonfigurować skanowanie komponentów, aby tylko zajęcia podcom.child
get podniósł.
Można określić pakiety skanowania składników, korzystając z adnotacji @ComponentScan("com.child")
w głównym pliku konfiguracyjnym (należy rozważyć klasę aplikacji).
- 1. Scala Adnotacja Dziedziczenie
- 2. Dostosowywanie wiosny 3 mvc: adnotacja dla RequestMappingHandlerMapping
- 3. Dziedziczenie i dziedziczenie interfejsu
- 4. @Transactional adnotacja
- 5. Biblioteka maven wiosny
- 6. agregacja django lub adnotacja
- 7. Adnotacja udostępnić generyczny typ
- 8. Adnotacja oparta ServiceLocatorFactoryBean?
- 9. Intellij Adnotacja Opcja wyszarzona
- 10. Adnotacja sprawdzania hibernacji
- 11. Ignoruj Hibernate @Where adnotacja
- 12. @ Adnotacja modelu i MVC
- 13. Polityka Adnotacja SOURCE retencji
- 14. @IdClass JPA Adnotacja
- 15. Adnotacja który wywołuje metodę
- 16. Adnotacja EnableWebMvc oznaczająca
- 17. Adnotacja ActiveAndroid ORM
- 18. Adnotacja nazywa THREADSAFE
- 19. Wiosna wartość Zakres adnotacja
- 20. @Cache adnotacja błąd Wykorzystanie
- 21. Samouczek wiosny MVC od zera
- 22. Bezpieczeństwo wiosny: ręczne uwierzytelnianie użytkownika
- 23. OSGi: Blueprint vs. Wiosny DM
- 24. wiosny MVC żądania konwencje mapowania
- 25. ElasticBeanstalk Java, aktywny profil wiosny
- 26. Jak przyczynić się do wiosny?
- 27. Podania int do wiosny właściwość
- 28. Czyste wirtualne dziedziczenie, wielokrotne dziedziczenie i C4505
- 29. python: dziedziczenie klasy/dziedziczenie zmiennej z polimorfizmem?
- 30. C# dziedziczenie
Dzięki ESala. W moim przypadku klasa, którą próbuję rozszerzyć, jest częścią słoika i jest zdefiniowana przy użyciu adnotacji komponentu. Chcę utworzyć nowy komponent bean, który rozszerza go i zastępuje jedną metodę. –
@PunterVicky Dodałem odpowiedź na twoje kolejne pytanie :) – ESala
Jeszcze raz dziękuję, ESala! –