Here is what I do:
Code:
<!-- Hibernate Session Factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"><value>classpath:XXXXXX-hibernate.cfg.xml</value></property>
<property name="eventListeners">
<map>
<entry key="post-load">
<bean class="uk.mycompany.ClassFilteringLoadEventListener">
<constructor-arg index="0">
<map>
<entry key="uk.mycompany.ClassIWantToAdvise">
<list>
<bean class="uk.mycompany.ClassThatDoesTheAdvisingLoadedListener">
<constructor-arg index="0" ref="someCollaborator"/>
</bean>
</list>
</entry>
</map>
</constructor-arg>
</bean>
</entry>
</map>
</property>
<property name="mappingDirectoryLocations" value="WEB-INF/classes"/>
</bean>
Let me talk you through that 
Basically I am specifiying a list of eventListeners that hibernate will call after loading the object. The first one (uk.mycompany.ClassFilteringLoadEventListener) is a predicate that will check the name of the class being loaded.
The second (uk.mycompany.ClassThatDoesTheAdvisingLoadedListen er) is the class that actually manipulates the loaded object.
Code:
Code:
public final class ClassFilteringLoadEventListener implements PostLoadEventListener {
public static interface LoadedObjectListener {
void loaded(final Object loadedObject);
}
private static final long serialVersionUID = 8652156835267250103L;
private final Map<Class, Collection<LoadedObjectListener>> listeners;
public ClassFilteringLoadEventListener(final Map<String, Collection<LoadedObjectListener>> theListeners) {
// spring assumes the key is string, not class :(
this.listeners = new HashMap<Class, Collection<LoadedObjectListener>>();
for (Map.Entry<String, Collection<LoadedObjectListener>> entry: theListeners.entrySet()) {
try {
Class clazz = Class.forName(entry.getKey());
listeners.put(clazz, entry.getValue());
} catch (final ClassNotFoundException e) {
throw new BeanInitializationException("Cannot locate class " + entry.getKey(), e);
}
}
}
public void onPostLoad(final PostLoadEvent event) {
Object loadedObject = event.getEntity();
informListeners(loadedObject, listeners);
}
public static void informListeners(final Object loadedObject, final Map<Class, Collection<LoadedObjectListener>> listeners) {
for (Map.Entry<Class, Collection<LoadedObjectListener>> entry: listeners.entrySet()) {
if (loadedObject.getClass().isAssignableFrom(entry.getKey())) {
for (LoadedObjectListener listener: entry.getValue()) {
listener.loaded(loadedObject);
}
}
}
}
}
This accepts a list of LoadedObjectListener to pass the loaded object to (if the class matches).
Is it the most elegant, probably not 
At the moment I have specific implementations of LoadedObjectListener, but you could easily create an implementation which gets hold of the appropriate BeanFactory and performs the autowiring on the loaded object.
HTH.