2010-08-17 6 views
18

Estoy buscando una forma de inyectar ciertas propiedades a través de Spring en un bean cargado desde el DB por Hibernate.Inyectando campos a través de Spring en entidades cargadas por Hibernate

E.g.

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

¿Puedo configurar Spring para que cada vez que Hibernate crea objetos de clase Student, algunas de las propiedades que se definen en algún archivo applicationContext son inyectados con la creación del objeto?

Respuesta

0

Una forma es definir el tipo de usuario personalizado y acceder a las propiedades desde la configuración del resorte allá. Pero creo que obtendrás mejores respuestas de los demás :).

29

Mientras the aspectj way obras, yo diría que el/modo de hibernación muelle estándar es registrar un LoadEventListener (leer más en el hibernate core reference, la spring reference y this thread)

aquí es un recorte de la definición de frijol SessionFactory primavera

<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> 

y aquí está la 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); 
     } 

    } 

} 

Mire mamá, no se necesita ningún aspecto.

0

Puede inyectar la dependencia en el bean DAO de hibernación para la entidad y establecer la propiedad en la entidad antes de devolverla desde el DAO.

Esto solo funcionará si está cargando la entidad de DAO

Cuestiones relacionadas