Зависимость от аннотаций Spring

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

5
задан skaffman 18 March 2010 в 09:54
поделиться

4 ответа

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


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

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

2) Скопируйте контекст пружины.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.

0
ответ дан 14 December 2019 в 13:32
поделиться

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

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

5
ответ дан 14 December 2019 в 13:32
поделиться

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

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

1
ответ дан 14 December 2019 в 13:32
поделиться

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

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

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

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

0
ответ дан 14 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: