首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Spring将字段注入Hibernate加载的实体

通过Spring将字段注入Hibernate加载的实体
EN

Stack Overflow用户
提问于 2010-08-18 01:56:30
回答 4查看 8.3K关注 0票数 18

我正在寻找一种方法,可以通过Spring将某些属性注入到由Hibernate从DB加载的bean中。

例如。

代码语言:javascript
复制
class Student {
   int id; //loaded from DB
   String name; //loaded from DB
   int injectedProperty; //Inject via Spring
}

我是否可以配置Spring,以便每当Hibernate创建学生类的对象时,一些applicationContext文件中定义的属性就会被注入到对象创建过程中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-18 02:02:49

有一个工具可以做到这一点,使用AspectJ class weaving with the @Configurable annotation。这将使用Spring依赖项自动连接带注释的类的任何new实例,包括使用Hibernate之类的反射实例化的对象。

它确实需要一些类加载魔术,因此依赖于compatibility with your server platform

票数 10
EN

Stack Overflow用户

发布于 2010-08-19 16:18:09

虽然the aspectj way可以工作,但我想说标准的spring / hibernate方法是注册一个LoadEventListener (在hibernate core referencespring referencethis thread中阅读更多)

下面是spring sessionfactory bean定义的一小段代码

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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);
        }

    }

}

听着妈妈,不需要aspectj。

票数 30
EN

Stack Overflow用户

发布于 2010-08-18 02:01:30

一种方法是定义自定义用户类型,并从那里的spring配置访问属性。但我认为你会从其他人那里得到更好的回复:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3505421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档