Может ли весна понять @inject заменить шва в качестве реализации JSR-299?
-
27-09-2019 - |
Вопрос
Я заметил из нескольких веб-страниц, которые, по-видимому, весна 3.0 поддерживает @inject из JSR-330. Поскольку нам очень хотелось бы использовать синтаксис JSR-299 для инъекций на зависимость в наших библиотеках как для веб-приложений, так и для автономных приложений, и иметь альтернативы для сварки, было бы неплохо, если бы весна может сделать это.
Будучи новичком для весны, я попытался загрузить распределение весеннего рамочного рамочного рамок и положить все банки на путь сборки Eclipse. Нет ввода аннотации, поэтому мой существующий тестовый проект, использующий сварные сварки, не скомпилировал.
Это может быть сделано с весной? Что мне нужно сделать, чтобы он бег?
(Я знаю, что ущербов в конечном итоге это тоже поддержит. Это только в SVN сейчас, и если есть официальный весенний релиз, который может, это было бы лучше.)
Это может быть сделано. JSR-330 JAR должна быть загружена отдельно, и CGLIB для анализа вручную написано классов @configuration, а также реализация регистрации Commons.
Самая большая отличие от сварного шва, кажется, является то, что проводка должна быть написана вручную, а не волшебным образом найденным (немного более громоздким, но может сделать более надежные приложения), а также время запуска намного меньше. Я все еще новичок на весну - есть ли способ получить классы @configuration AutoDiscovered?
Решение
Из Весна 3.0.x Справочная документация:
Аннотация JSR 330's @inject может использоваться вместо @autoodowired в приведенных ниже примерах. @ INJECT не имеет необходимой недвижимости в отличие от @autowire Antotowire, которая имеет необходимое свойство для указания, если значение введена необязательна. Это поведение включено автоматически, если у вас есть банка JSR 330 на классе.
Таким образом, вы можете сделать свой код Agnostic от Di Framework с помощью @inject, но вам все равно нужно включить банку с javax.inject
Классы в вашем проекте, потому что весна не отправляет их сама. Вы можете найти соответствующую банку в разделе загрузки в Код Google Google JSR-330.
Другие советы
То javax.inject
Пакет не включен как часть весны 3, но он поддерживает его, если он присутствует.
Если вы посмотрите на источник для AutowiredAnnotationBeanPostProcessor
, вы увидите, что конструктор использует отражение, чтобы найти javax.inject.Inject
, и регистрирует сообщение, если он находит его. Там нет зависимости от времени компиляции на это.
Вам нужно будет найти банки JSR-330 из другого источника (например, Javaee 6 SDK).