2010-06-16 11 views
5

Zauważyłem z kilku stron internetowych, które podobno Spring 3.0 obsługuje @Inject z JSR-330. Ponieważ chcielibyśmy użyć składni JSR-299 do wstrzykiwania zależności w naszych bibliotekach dla aplikacji internetowych i samodzielnych aplikacji, i mamy alternatywy dla Weld, byłoby dobrze, gdyby Spring mógł to zrobić.Czy Spring Spring może zrozumieć, że @Inject zastępuje Weld jako implementację JSR-299?

Będąc nowicjuszem w Spring, próbowałem pobrać dystrybucję Spring Framework i umieścić wszystkie słoiki na ścieżce budowania Eclipse. Brak adnotacji typu Wstrzykiwanie, więc mój istniejący projekt testowy wykorzystujący Weld nie został skompilowany.

Czy można to zrobić wiosną? Co muszę zrobić, aby uruchomić?

(Jestem świadomy, że Guice ostatecznie będzie wspierać ten też. Jest tylko w SVN teraz, a jeśli nie jest to oficjalna wersja Wiosna, która może, że będzie lepiej.)


Może będzie zrobione. JAR-330 JSR-330 musi być pobrany osobno, a cglib - parsować ręcznie napisane klasy @Configuration plus implementację logowania commons.

Największą różnicą w stosunku do spoiny wydaje się być to, że okablowanie musi zostać zapisane ręcznie, zamiast znalezione w magiczny sposób (nieco bardziej uciążliwe, ale może sprawić, że aplikacje będą bardziej niezawodne), a czas uruchamiania jest znacznie mniejszy. Wciąż jestem nowy w Spring - czy istnieje sposób na automatyczne wykrycie klas @Configuration?

Odpowiedz

2

Z Spring 3.0.x Reference documentation:

JSR 330 za @Inject adnotacja może być stosowany zamiast sprężyny @Autowired w poniższych przykładach. @Inject nie ma wymaganej właściwości w przeciwieństwie do adnotacji Spring @Autowire, która ma właściwość wymaganą do wskazania, czy wstrzykiwana wartość jest opcjonalna. To zachowanie jest włączane automatycznie, jeśli masz JSR 330 JAR w ścieżce klasy.

Więc można dokonać kod agnostyk ram DI za pomocą @Inject, ale trzeba jeszcze to słoik z javax.inject klas w projekcie, ponieważ sprężyna nie wysyła im się. Możesz znaleźć odpowiedni słoik w sekcji pobierania pod numerem JSR-330's Google Code site.

+0

Znalazłem ten sam fragment, ale nie mogę go uruchomić. Jeśli możesz, podziel się tym, jak to zrobiłeś. –

+0

Nie będę mógł oglądać tego kodu do dziś wieczorem. Czy dostałeś słoik ze strony JSR? http://code.google.com/p/atinutru/ – Ophidian

+0

Najwyraźniej nie mogę przeczytać. Nie pobierałem słoików JSR-330 osobno. Spróbuję jutro. –

2

Pakiet javax.inject nie jest częścią Spring 3, ale obsługuje go, jeśli jest obecny.

Jeśli spojrzysz na źródło dla AutowiredAnnotationBeanPostProcessor, zobaczysz, że konstruktor używa odbicia, aby zlokalizować javax.inject.Inject i loguje wiadomość, jeśli ją znajdzie. Nie ma zależności od czasu kompilacji.

Musisz zlokalizować JAR-y JSR-330 z innego źródła (np. JavaEE 6 SDK).

Powiązane problemy