If you used SessionFactory, this will be the configuration:
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="eventListeners"> <map> <entry key="pre-load"> <bean class="com.mycompany.MyCustomHibernateEventListener1" /> </entry> <entry key="pre-persist"> <bean class="com.mycompany.MyCustomHibernateEventListener2" /> </entry> </map> </property> </bean>
But since you are using JPA, I am afraid that you need to use AOP as described in this thread
Or you can
- store ApplicationContext in a ThreadLocal or user class of the owner and expose it through a static method
- You have a base class for your listeners something like this:
Base class:
public abstract class ListenerBase{ protected void wireMe(){ ApplicationContext ctx = ContextHelper.getCurrentApplicationContext(); ctx.getAutowireCapableBeanFactory().autowireBean(this); } }
Now in your lifycycle methods, first call wireMe() .
Update:
Here is an example implementation of ContextHelper :
public final class ContextHelper implements ApplicationContextAware{ private static final ContextHelper INSTANCE = new ContextHelper(); private ApplicationContext applicationContext; @Override public void setApplicationContext(final ApplicationContext applicationContext){ this.applicationContext = applicationContext; } public static ApplicationContext getCurrentApplicationContext(){ return INSTANCE.applicationContext; }; public static ContextHelper getInstance(){ return INSTANCE; } private ContextHelper(){ } }
Connect it to your Spring Bean configuration as follows:
<bean class="com.mycompany.ContextHelper" factory-method="getInstance" />
Sean Patrick Floyd Nov 10 2018-10-11 11:43
source share