Есть ли рекомендуемый способ получить Spring 2.5+ для автоматического подключения объектов домена Hibernate? - PullRequest
4 голосов
/ 29 января 2009

Есть ли рекомендуемый способ заставить Spring 2.5+ автоматически связывать доменные объекты Hibernate (3.0+). Я понимаю, что есть способ сделать это, используя AspectJ (@Configurable), но я бы хотел избежать использования AspectJ.

Некоторые Google нашли этот класс DependencyInjectionInterceptorFactoryBean , но, похоже, он просто живет в песочнице (и только в 2.0.x?).

Я могу создать 10-строчный Hibernate PreLoadEventListener, чтобы сделать эту автопроводку для меня, но я действительно предполагал, что это будет то, что org.springframework.orm.hibernate3 предоставило.

Ответы [ 3 ]

2 голосов
/ 14 марта 2009

Рекомендованный рекомендуемый способ внедрения зависимостей в экземпляры, находящиеся вне контроля Spring, - использовать упомянутое вами решение на основе AspectJ. Насколько я знаю, специфичные для Hibernate классы были заброшены в пользу общего подхода, описанного здесь .

Также обратите внимание, что вам не нужно @Configurable, если вы используете AbstractInterfaceDrivenDependencyInjectionAspect. Как вы сказали, вам нужно будет использовать AspectJ либо для ткачества во время загрузки, либо во время компиляции. В качестве преимущества вы получите внедрение зависимостей для «угловых случаев», таких как десериализация, а также с этим подходом.

Для полного примера того, как шаблоны, предложенные Рамнивасом, могут быть реализованы и интегрированы, посмотрите здесь .

0 голосов
/ 12 марта 2009

Посмотрите на аннотации @Repository (и @Component). В Spring 2.5 концепция «стереотипных» аннотаций, представленная в Spring 2.0, была расширена, и все эти аннотации поддерживаются новой функцией сканирования компонентов, как описано в главе Настройка на основе аннотаций документации Spring.

Так что это должно работать:

@Repository
public class HibernateClinic implements Clinic {

    private SessionFactory sessionFactory;

    public HibernateClinic(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Collection getVetTypes() {
        Session session = sessionFactory.getCurrentSession();
        return session.createQuery(”from VetTypes”).list();
    }
}

(образец взят из презентации Россена Стоянчева в Метрополис 2008)

0 голосов
/ 29 января 2009

Не могли бы вы привести пример кода?

Я считаю, что весь анти-паттерн "модель анемичного домена" трудно реализовать. Я думаю, это звучит великолепно в теории, но не так здорово на практике.

Какие факторы привели вас к подходу с использованием богатой доменной модели?

...