2013-10-01 22 views
7

Mam działającą aplikację sieci web wiosną. Teraz chcę ponownie wykorzystać jego części również do innego projektu. Dlatego mam dwa pytania:Jak spakować bibliotekę źródłową do ponownego wykorzystania?

  1. Jaki jest zalecany sposób pakowania takich funkcji, jak biblioteka wielokrotnego użytku? Plik JAR z kontekstem XML aplikacji lub JAR + dodatkowy XML? Coś innego?
  2. Jak dołączyć taką bibliotekę do innego projektu Spring (web-) (inna przestrzeń nazw - pakiet), aby np. @Autowired będzie działać? Chyba prosty JAR na ścieżce klas nie jest wystarczający - jak odwołać się do kontekstu aplikacji biblioteki itp? Jakie inne kroki są potrzebne?

Odpowiedz

1

Powinieneś użyć jakiegoś opakowania, które by określiło, od czego zależy. Popularną opcją jest używanie opakowania Maven, dostarczając pliki pom.xml wyjaśniające zależności. Po wykonaniu tej czynności uruchomisz aplikację Maven.

Podczas korzystania z niego należy odwołać się do udostępnionego szablonu konfiguracji w konfiguracji wiosna aplikacji. Możesz zaimportować go bezpośrednio:

<import resource="classpath*:/META-INF/path/to/otherAppContext.xml" /> 

Zakłada to, że rzeczywiście chcesz udostępnić konfigurację kontekstu wiosennego. Jeśli udostępniasz klasy wielokrotnego użytku (tylko), zwykle nie ma potrzeby udostępniania konfiguracji kontekstowych.

+0

więc polecasz swój kod w ten sposób, że jest "niezależny" od wiosny? ale dlaczego nie chcesz używać DI? jak radzisz sobie z zależnościami między klasami? – sodik

4

Podejście, którego używam, polega na upewnieniu się, że fragmenty kontekstu aplikacji znajdują się w dobrze znanym miejscu w pliku jar biblioteki (osobiście używam META-INF/spring). Więc mogę mieć jakąś wspólną konfigurację zabezpieczeń i fasoli w pliku o nazwie META-INF/spring/common-security-context.xml

W aplikacji klienckiej (jeden przy użyciu biblioteki) można dołączyć usług i fasolę z wszystkie twoi biblioteki współdzielone przez mającą import podobnie do po jednym z kontekstu aplikacji:

<import resource="classpath*:META-INF/spring/*-context.xml" /> 

(należy zwrócić uwagę na gwiazdkę po ścieżce klas). Spowoduje to zlokalizowanie plików, których nazwy pasują do wzorca META-INF/spring/*-context.xml, z dowolnego pliku jar lub korzenia ścieżki klas widocznych dla uruchomionej aplikacji i zagregują je w jeden kontekst logiczny. Dostosuj symbol wieloznaczny zgodnie z oczekiwaniami.

Oczywiście potrzebna jest pewna strategia unikania kolizji nazwy komponentu bean/usługi, która może wystąpić, jeśli zaczniesz go używać szeroko.

+0

dziękuję, w zasadzie oboje zarekomenduj XML kontekstu opakowania wewnątrz JAR, a następnie zaimportuj go ... dzięki za wskazówkę – sodik

+0

@sodik oboje dostarczyliśmy w ten sam sposób, jeśli to konieczne. Jednak, jak już mówiłem, zwykle nie ma potrzeby udostępniania konfiguracji xml, tylko same klasy. – eis

Powiązane problemy