【问题标题】:Injecting fields via Spring into entities loaded by Hibernate通过 Spring 将字段注入 Hibernate 加载的实体中
【发布时间】:2011-03-31 03:27:35
【问题描述】:

我正在寻找一种通过 Spring 在由 Hibernate 从数据库加载的 bean 中注入某些属性的方法。

例如

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

我可以配置 Spring 以便每当 Hibernate 创建类 Student 的对象时,在某些 applicationContext 文件中定义的某些属性被注入到对象创建中?

【问题讨论】:

    标签: java hibernate spring dependency-injection


    【解决方案1】:

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

    这里是 spring sessionfactory bean 定义的一个片段

    <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);
            }
    
        }
    
    }
    

    看妈妈,不需要任何方面。

    【讨论】:

      【解决方案2】:

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

      它确实需要一些类加载魔法,因此取决于compatibility with your server platform

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          您可以将依赖项注入实体的休眠 DAO bean,并在从 DAO 返回之前在实体上设置属性。

          这仅在您从 DAO 加载实体时才有效

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-11-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-14
            • 2014-04-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多