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

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

例如

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

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

有一个设施,使用带有@Configurable注释的AspectJ类编织 。 这将使用Spring依赖项自动连接带注释的类的任何new实例,包括使用Hibernate等通过reflection实例化的对象。

它确实需要一些类加载魔法,因此取决于与服务器平台的兼容性 。

虽然aspectj方式有效,但我会说标准的spring / hibernate方式是注册一个LoadEventListener (在hibernate核心参考中读取更多内容, 弹簧引用和这个线程 )

这里是一个来自spring sessionfactory 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); } } } 

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

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

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

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