Зависимость от аннотаций Spring - PullRequest
5 голосов
/ 18 марта 2010

Я аннотировал свои классы аннотациями @Repository, @Resource, @Component, @Service, но эти классы должны работать в 2 средах.Первое окружение основано на Spring 2.x, в то время как у другого вообще нет пружины.Я уверен, что код не получится без пружинных банок, и я хочу узнать от вас идеи о том, как я могу сохранить аннотации, но все еще работать в обеих средах

Ответы [ 4 ]

5 голосов
/ 19 марта 2010

Чтобы иметь возможность использовать аннотации, которые вы упомянули, или позволить Spring использовать их для вас, чтобы вы получили выгоду, вам нужно использовать как минимум Spring 2.5.x, именно тогда они были представлены.

Кроме того, аннотации не обязательно должны быть на пути к классам. Они просто будут проигнорированы. Поскольку, когда вы используете Spring 2.0, не будет кода, который попытается «отсканировать» их.

1 голос
/ 18 марта 2010

Для каждой аннотации в Java существует соответствующий файл класса. Если вы узнаете, какие аннотации вы используете, вы можете скопировать файлы классов в другую среду.

Я не уверен, зависят ли эти классы от других классов aswel; вероятно, это не так, поскольку аннотации являются неизменяемыми объектами только для данных. Если у класса также есть методы, вы можете повторно скомпилировать (с тем же ID сериализации) источники аннотаций без методов (т.е. только полей) для использования в другой среде.

0 голосов
/ 20 марта 2010

Не было бы весны, если бы это заставило вас сделать ваши классы прямо зависимыми от него.

Вы можете определить свои собственные аннотации, которые служат той же цели, что и проверенные весной. То есть определить com.yourcompany .... Компонент и т. д.

Я предполагаю, что вы используете <context:component-scan .../> где-то в вашем весеннем конфиге. Просто добавьте use-default-filters="false" и определите свой собственный фильтр в соответствии с вашими аннотациями.

Ищите PostProcessors, которые фактически выполняют всю работу. Они могут быть настроены на использование альтернативного набора аннотаций. @Repository проверено PersistenceExceptionTranslationPostProcessor. Этот PostProcessor может быть настроен на использование вашего эквивалента аннотации.

0 голосов
/ 18 марта 2010

Поскольку вы не можете удалить принятый пост, я предлагаю вам прочитать / проголосовать за пост Ханса, что намного лучше, чем мой первоначальный: Зависимость от аннотаций Spring


При использовании аннотаций стереотипа (@Service и т. Д.) Компромисс для получения проверки bean-компонента времени компиляции заключается в том, что вы стали связанными с библиотекой Spring-context в вашем коде. Я вижу 3 немедленных варианта:

1) Удалите аннотации и настройте компоненты в формате XML.

2) Скопируйте spring-context.jar (или эквивалентную библиотеку, содержащую ваши аннотации стереотипов) в ваш проект, не относящийся к Spring, чтобы разрешить зависимости, но оставьте Spring ненастроенным, чтобы он не использовался в вашем коде.

3) Удалите аннотации из ваших конкретных классов и дополните их версиями «Spring». Этот подход может или не может быть немного агрессивным для вашего дизайна, но стоит рассмотреть:

public class MyDAO {
    protected SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    // .. Your DAO code resides here ..
}

И подкласс Spring:

@Repository
public class MySpringDAO extends MyDAO {

    @AutoWired
    protected SessionFactory sessionFactory;
}

Таким образом, ваш проект, отличный от Spring, может использовать «MyDAO» и исключить класс «MySpringDAO» из сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...