проксю, при этом не совсем сойдя с ума (не делая мега-магический Аспект)
                  
                  
                  
                  
                  
                  В чем суть:
                  
                  
                  
                  
                  
                  Есть интерфейс, описывающий RequestMapping,  сваггер доку, и всю другую мишуру, которая лишь мозолит глаза в реализации
                  
                  
                  
                  
                  
                  Пусть он называется MyApi
                  
                  
                  У MyApi есть реализация MyController
                  
                  
                  
                  
                  
                  Задача:
                  
                  
                  
                  
                  
                  В случае, если включен профиль x я хочу производить определенные действия, вместо того, чтобы вызвать контроллер
                  
                  
                  
                  
                  
                  Проблема в том, что действия разные на каждый эндпоинт
                  
                  
                  Соответсвенно, было решено сделать некую прослойку
                  
                  
                  
                  
                  
                  MyAdvisor implements MyApi
                  
                  
                    
                  
                  
                  Данная прослойка была помечена как @Primary
                  
                  
                  Чтобы такой простой аспект
                  
                  
                  
                  
                  
                  @Aspect
                  
                  
                  @Component
                  
                  
                  @Profile("x")
                  
                  
                  @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
                  
                  
                  public class AdvisorAspect {
                  
                  
                  
                  
                  
                      @Autowired
                  
                  
                      private ApplicationContext applicationContext;
                  
                  
                  
                  
                  
                      @Pointcut("@annotation(org.springframework.web.bind.annotation.RestController)")
                  
                  
                      void restController() {
                  
                  
                      }
                  
                  
                  
                  
                  
                      @SneakyThrows
                  
                  
                      @Around("restController()")
                  
                  
                      public Object invokeAdvisor(ProceedingJoinPoint pjp) {
                  
                  
                          final var interfaceType = Stream.ofNullable(pjp.getTarget())
                  
                  
                                  .map(ClassUtils::getAllInterfacesAsSet)
                  
                  
                                  .flatMap(Collection::stream)
                  
                  
                                  .filter(superInterface -> superInterface.isAnnotationPresent(RequestMapping.class))
                  
                  
                                  .findAny();
                  
                  
                  
                  
                  
                          if (interfaceType.isPresent()
                  
                  
                                  && pjp.getSignature() instanceof MethodSignature) {
                  
                  
                              final var clazz = interfaceType.get();
                  
                  
                              final var advisorOrReal = applicationContext.getBean(clazz);
                  
                  
                              final var signature = (MethodSignature) pjp.getSignature();
                  
                  
                              return signature.getMethod().invoke(advisorOrReal, pjp.getArgs());
                  
                  
                          }
                  
                  
                  
                  
                  
                          return pjp.proceed(pjp.getArgs());
                  
                  
                      }
                  
                  
                  
                  
                  
                  }
                  
                  
                  
                  
                  
                  По типу интерфейса MyApi мог найти реализацию Advisor'а и вызвать метод на нем.
                  
                  
                  
                  
                  
                  В идеале, я бы хотел иметь два контроллера, и чтобы спринг автомагически выбирал Primary
                  
                  
                  Но, к сожалению, он не такой умный(
                  
                  
                  Я ловлю AmbigiousMapping даже когда MyAdvisor является @Component
                  
                  
                  То есть, WebMvc...AutoConfiguration не смотрит на факт того, является ли бин Контроллером, а на факт того, что есть ли где-то в классе/выше аннотация @RequestMapping
                  
                  
                  
                  
                  
                  Spring Boot 2.3.3.RELEASE
                  
                  
                  
                  
                  
                  Есть какие-то варианты, кроме написания кода без прослойки, полностью в аспекте?)
                  
                  
                  Большое спасибо
                  
                  
                
cloud gateway?
 Daniiλ
                          Shreyder
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Daniiλ
                          Shreyder
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Не. У нас траефик пидалит запросы. К нему писать сложную мидлварь щас дорого будет. Ишу решение в приложении)
 Daniiλ
                          Shreyder
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Daniiλ
                          Shreyder
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  выше кринжа навалил. Да, оно подойдет. Спасибо
Обсуждают сегодня