У меня есть следующий класс Spring Boot, аннотированный пользовательской аннотацией Counted
:
@RestController
@RequestMapping("/identity")
public class IdentityController {
@Autowired
private IdentityService identityService;
@PostMapping
@Counted(value = "post_requests_identity")
public Integer createIdentity() {
return identityService.createIdentity();
}
}
Аннотация Counted
определяется следующим образом:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface Counted {
String value();
}
Что яхочу написать процессор аннотаций, который эффективно заставит мой контроллер работать так, как показано ниже:
@RestController
@RequestMapping("/identity")
public class IdentityController {
@Autowired
private IdentityService identityService;
@Autowired
private PrometheusMeterRegistry registry;
@PostConstruct
public void init() {
registry.counter("post_requests_identity");
}
@PostMapping
public Integer createIdentity() {
registry.counter("post_requests_identity").increment();
return identityService.createIdentity();
}
}
Я смог сделать это с отражением во время выполнения, но это значительно увеличивает время запуска.Есть ли способ сделать это с помощью только аннотаций и собственного процессора аннотаций?Проще говоря, я хочу создать аннотацию, которая добавляет аннотированный метод к классу и добавляет произвольный вызов метода к уже существующему методу.
Я знаю, что обработка аннотаций на самом деле не поддерживает изменение источника,Мне было бы интересно узнать какой-либо другой способ, позволяющий мне выполнить вышеизложенное, не помещая реестр и связанный с ним код непосредственно в мой исходный код.