Внедрение полей через Spring в объекты, загруженные Hibernate

Я ищу способ внедрить определенные свойства через Spring в bean-компонент, который загружается из БД Hibernate.

Например

class Student {
   int id; //loaded from DB
   String name; //loaded from DB
   int injectedProperty; //Inject via Spring
}

Могу ли я настроить Spring так, чтобы всякий раз, когда Hibernate создает объекты класса Student, некоторые свойства, определенные в некотором файле applicationContext, внедряются при создании объекта?

18
задан Sean Patrick Floyd 19 August 2010 в 08:25
поделиться

3 ответа

Для этого есть средство, использующее переплетение классов AspectJ с аннотацией @Configurable . любой новый экземпляр аннотированного класса с зависимостями Spring, включая объекты, экземпляры которых создаются посредством отражения с использованием подобных Hibernate.

Это требует некоторой магии загрузки классов, и поэтому зависит от совместимости с вашим серверная платформа .

10
ответ дан 30 November 2019 в 07:08
поделиться

Хотя работает аспектj , я бы сказал, что стандартный способ Spring / гибернации - это зарегистрировать LoadEventListener (подробнее см. справочник ядра спящего режима ) , ссылка на пружину и этот поток )

вот отрывок из определения компонента Spring sessionfactory

<bean id="mySessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ...
    <property name="eventListeners">
        <map>
            <entry key="post-load">
                <bean class="com.foo.spring.MyLoadListener"></bean>
            </entry>
        </map>
    </property>
</bean>

и вот LoadEventListener:

public class MyLoadListener implements LoadEventListener{

    public void setSpringManagedProperty(String springManagedProperty){
        this.springManagedProperty = springManagedProperty;
    }
    private String springManagedProperty;

    @Override
    public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException{
        if(MyEntity.class.getName().equals(event.getEntityClassName())){
            MyEntity entity = (MyEntity) event.getInstanceToLoad();
            entity.setMyCustomProperty(springManagedProperty);
        }

    }

}

Смотри, мама, нет аспектаj нужный.

30
ответ дан 30 November 2019 в 07:08
поделиться

Один из способов - определить собственный тип пользователя и получить доступ к свойствам из конфигурации пружины. Но я думаю, что вы получите гораздо лучшие ответы от других :).

0
ответ дан 30 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

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