我正在寻找一种方法,可以通过Spring将某些属性注入到由Hibernate从DB加载的bean中。
例如。
class Student {
int id; //loaded from DB
String name; //loaded from DB
int injectedProperty; //Inject via Spring
}
我是否可以配置Spring,以便每当Hibernate创建学生类的对象时,一些applicationContext文件中定义的属性就会被注入到对象创建过程中?
发布于 2010-08-18 02:02:49
有一个工具可以做到这一点,使用AspectJ class weaving with the @Configurable
annotation。这将使用Spring依赖项自动连接带注释的类的任何new
实例,包括使用Hibernate之类的反射实例化的对象。
它确实需要一些类加载魔术,因此依赖于compatibility with your server platform。
发布于 2010-08-19 16:18:09
虽然the aspectj way可以工作,但我想说标准的spring / hibernate方法是注册一个LoadEventListener (在hibernate core reference、spring reference和this 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);
}
}
}
听着妈妈,不需要aspectj。
发布于 2010-08-18 02:01:30
一种方法是定义自定义用户类型,并从那里的spring配置访问属性。但我认为你会从其他人那里得到更好的回复:)。
https://stackoverflow.com/questions/3505421
复制相似问题