Projektuję i wdrażam aplikację webową Java za pomocą Spring, Spring MVC i Maven. Moim celem jest stworzenie trzech modułów:
- moduł danych zawierający jednostki i DAO
- moduł usługi zawierający logikę biznesową i klasy @Service
- moduł WWW zawierający pliki jsp i klasy @Controller
Komunikacja między modułem usług a modułem danych działa doskonale. Moduł serwisowy zależy od modułu danych i zawiera moduł danych z <import resource="dataApplicationContext.xml"/>
w serviceApplicatioContext.xml. Przetestowałem go za pomocą statycznej klasy głównej i niektórych testów integracyjnych.
Problem, który mam, polega na uzależnieniu modułu WWW od modułu usługi. Jak zrobić, aby mój plik mvc-dispatcher-servlet.xml zaimportował mój plik serviceApplicatioContext.xml?
Rozwiązanie, które próbowałem dotychczas: 1) Jeśli tylko użyję <import resource="/serviceApplicationContext.xml"/>
następnie Spring MVC szukałby /WEB-INF/serviceApplicationContext.xml, który oczywiście nie istnieje.
2) Jeśli wymieniam <context:component-scan base-package="my.project.controller" />
z <context:component-scan base-package="my.project" />
następnie Spring nie uruchamia się i nie jest tworzona sesja hibernacji.
Wielkie dzięki, Alex
Odpowiedzi:
2 dla odpowiedzi № 1Wiosna ma swoje ładowanie zasobów mechanizm i każde wdrożenie ApplicationContext
ma swoją własną domyślną lokalizację zasobów. The ClassPathXmlApplicationContext
domyślnie ładuje się ze ścieżki klasy, podczas gdy XmlWebApplicationContext
ładuje z katalogu głównego aplikacji internetowej.
Możesz określić na każdym zasobie, od którego miejsca go załadować, poprzedzając go. classpath:
prowadzi do ciągłego ładowania z ścieżki klasy, file:
z systemu plików itp.
W skrócie po prostu dodaj classpath:
do nazwy zasobów do zaimportowania, aby wymusić, że ten plik jest zawsze ładowany ze ścieżki klasy.
<import resource="classpath:serviceApplicationContext.xml" />