Может ли Spring понимать @Inject, заменяющий Weld как реализацию JSR-299? - PullRequest
6 голосов
/ 16 июня 2010

Я заметил на нескольких веб-страницах, что, по-видимому, Spring 3.0 поддерживает @Inject из JSR-330.Поскольку нам бы очень хотелось использовать синтаксис JSR-299 для внедрения зависимостей в наших библиотеках как для веб-приложений, так и для автономных приложений, и иметь альтернативы Weld, было бы неплохо, если бы Spring мог это сделать.

новичок в Spring, я попытался скачать дистрибутив Spring Framework и поместить все файлы jar в путь сборки Eclipse.Нет комментариев Inject, поэтому мой существующий тестовый проект с использованием Weld не компилировался.

Можно ли это сделать с помощью Spring?Что мне нужно сделать, чтобы запустить его?

(я знаю, что в конечном итоге Guice это тоже поддержит. Пока только в SVN, и если есть официальный релиз Spring, который может, это будетбыть лучше.)


Это можно сделать.JAR-330 должен быть загружен отдельно, и cglib для анализа написанных вручную классов @Configuration, а также реализации регистрации общего достояния.

Самым большим отличием от Weld является то, что вместо этого необходимо писать проводку вручнуюиз волшебно найденных (немного более громоздких, но может сделать более надежные приложения), плюс время запуска гораздо меньше.Я все еще новичок в Spring - есть ли способ автоматически обнаружить классы @Configuration?

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Из Spring 3.0.x Справочная документация :

Аннотацию @Inject JSR 330 можно использовать вместо SpringAutoWired в приведенных ниже примерах. @Inject не имеет обязательного свойства в отличие от аннотации SpringAAtowire, в которой есть обязательное свойство, указывающее, является ли вводимое значение необязательным. Это поведение включается автоматически, если у вас есть JAR 330 JAR на пути к классам.

Таким образом, вы можете сделать свой код независимым от DI-фреймворка, используя @Inject, но вам все равно нужно включить jar с классами javax.inject в ваш проект, потому что Spring не отправляет их сам. Соответствующий файл можно найти в разделе загрузок по адресу на сайте Google Code JSR-330 .

2 голосов
/ 16 июня 2010

Пакет javax.inject не входит в состав Spring 3, но он поддерживает его, если он присутствует.

Если вы посмотрите на источник для AutowiredAnnotationBeanPostProcessor, вы увидите, что конструктор используетотражение, чтобы найти javax.inject.Inject, и регистрирует сообщение, если оно его находит.От него не зависит время компиляции.

Вам нужно найти JAR-файлы JSR-330 из какого-либо другого источника (например, JavaEE 6 SDK).

...