Я хочу создать пользовательскую аннотацию (метод scoped), который будет вставлен в базу данных. Эта аннотация будет прикреплена к каждому методу в моем контроллере rest, так что когда выполняется вызов API, аннотация сохраняет действие, выполненное в таблице track-user, в базе данных.
пока я создал интерфейс аннотаций, я думаю, что мне нужно добавить метод, который сохраняет действие и автора в таблице track-user, но я не знаю, где и как:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionLog {
String action() default "UNDEFINED";
String author() default "UNDEFINED";
}
Я хочу использовать это так:
@ActionLog(author="John",action="get all users")
public List<User> getAllUsers() { return repo.findAll(); }
Тогда в моей базе данных должна быть новая вставка действия с ее автором.
Чтобы создать свою собственную аннотацию, вы должны сначала создать интерфейс, который вы уже сделали, чем написать класс Aspect для этого.
@Component
@Aspect
public class ActionLogAspect {
@Around(value = "@annotation(ActionLog)", argNames = "ActionLog")
public getUsersByAuthorName(ProceedingJoinPoint joinPoint, ActionLog actionLog) throws Throwable {
List<User> userList = new ArrayList();
//Your Logic for getting user from db using Hibernate or Jpa goes here.
//You can call your functions here to fetch action and author by using
// actionLog.action() and actionLog.author()
return userList;
}
}