Hazırda bekletme düzenleyicisinin revizyon dinleyicisinde bazı veritabanı işlemleri yapmam gerekiyor. Bunun için Spring Framework'ün inejction yeteneklerine ihtiyacım var. Bu nasıl uygulanabilir? İşte ihtiyacı temsil eden kod ancak CustomRevisionListener Envers kodunda bir kurucu tarafından başlatılır. Yay yalnızca statik servis konumlandırıcı olarak SecurityContextHolder
'a sahiptir. Diğer fasülye nasıl enjekte edilir? CustomRevisionListener yanahibernate-envers RevisionListener yayı, ilkbahar çekirdeği olarak yayına bağlandı
@Service
public class CustomRevisionListener implements EntityTrackingRevisionListener {
@Resource
private PersistenceManagerHibernate persistenceManagerHibernate;
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername(getUsername());
}
public String getUsername() {
final SecurityContext context = SecurityContextHolder.getContext();
if (context != null) {
if (context.getAuthentication() != null) {
return context.getAuthentication().getName();
} else {
return "anonymous";
}
}
return "anonymous";
}
@Override
public void entityChanged(@SuppressWarnings("rawtypes") Class entityClass, String entityName, Serializable entityId, RevisionType revisionType, Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setEntityId(entityId.toString());
revision.setEntityName(entityName);
revision.setRevisionType((int)revisionType.getRepresentation());
Auditable auditable = null;
if (entityId instanceof Long) {
auditable = persistenceManagerHibernate.findById(entityClass, (Long)entityId);
}
revision.setGroupName(auditable.getAuditGroupName());
revision.setGroupEntityId(auditable.getAuditGroupId());
}
}
Teşekkür içinde, büyük çalıştı. – realcnbs