2010-06-16 5 views
5

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

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

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

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


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

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

ответ

2

От Spring 3.0.x Reference documentation:

JSR 330 в @Inject аннотации могут быть использованы вместо Спринга @Autowired в приведенных ниже примерах. @Inject не имеет требуемого свойства в отличие от аннотации @Autowire от Spring, которая имеет обязательное свойство, чтобы указать, является ли введенное значение необязательным. Это поведение активируется автоматически, если у вас есть JAR 330 JAR в пути к классам.

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

+0

Я нашел тот же фрагмент, но я не могу заставить его работать. Если да, можете поделиться, как вы это сделали. –

+0

Я не буду смотреть этот код до сегодняшнего вечера. Вы получили банку с сайта JSR? http://code.google.com/p/atinject/ – Ophidian

+0

Видимо, я не умею читать. Я не загружал JSR-330 банки отдельно. Я постараюсь завтра. –

2

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

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

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