Я написал @ interface
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WriteToMap {
}
Аспект
@Aspect
@Configuration
public class WriteToMapAspect {
@Autowired
private SingletonBuffer singletonBuffer;
@AfterReturning(value = "@annotation(writeToMap)", returning = "data")
public void processExecutionTime(WriteToMap writeToMap, Object data){
singletonBuffer.putToMap("key", data); // I am facing issue here how to get key
}
Ниже приведены мои методы репозитория, где я имеюаннотированный @WriteToMap
Репо отдела
@Repository
public interface DepartmentRepository extends CrudRepository<DepartmentEntity, Long> {
@Override
@WriteToMap
<S extends DepartmentEntity> S save(S entity);
}
Репо филиала
@Repository
public interface BranchRepository extends CrudRepository<BranchEntity, Long> {
@Override
@WriteToMap
<S extends BranchEntity> S save(S entity);
}
CategoryRepo
@Repository
public interface CategoryRepository extends CrudRepository<CategoryEntity, Long> {
@Override
@WriteToMap
<S extends CategoryEntity> S save(S entity);
}
Служба
@Override
@Transactional
public DepartmentBo save(DepartmentBo departmentBo) {
departmentRepository.save(departmentBo.toEntity())
branchRepository.save(departmentBo.getBranch().toEntity())
categoryRepository.save(departmentBo.getCategory().toEntity())
return departmentBo;
}
Моя проблема заключается в том, что при запуске транзакции я хочу создать / получить уникальный ключ (не разделяемый, пересекающийся несколько транзакций, но разделяемыйв аспектах вызова в рамках транзакции), которые доступны до завершения транзакции.этот ключ я хочу установить здесь
singletonBuffer.putToMap("key", data); // I am facing issue here how to get key
Примечание: putToMap в основном добавляет элемент в список на основе ключа, т.е. Map<String,List<Object>>