2 профиля, 2 реализации метода, 1 вызов в html-файле через Thymeleaf.Как? - PullRequest
0 голосов
/ 14 мая 2018

В моем приложении была только 1 реализация, которая использовала определенный класс и его методы. Я добавил еще одну реализацию и включил профили. Добавление второго профиля заставило меня реализовать этот класс для каждого профиля отдельно, так как были некоторые различия.

Проблема в том, что перед изменением этот конкретный метод вызывался через Thymeleaf в html-файле следующим образом:

<td class="text-center" id="hashrate" th:text="${@findAndDisplayDataService.formatHashrate(networkHashrate.hashrate)}">Sample hashrate</td>

Теперь имя класса изменилось на: FindAndDisplayDataServiceQuartz и FindAndDisplayDataServiceSpringScheduler соответственно профилям. Я больше не могу вызывать метод в HTML-файл. Я обернул оба класса интерфейсом FindAndDisplayDataService, но я не могу вызвать метод интерфейса в Thymeleaf.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Заставьте FindAndDisplayDataServiceQuartz и FindAndDisplayDataServiceSpringScheduler реализовать общий interface, возможно, с тем же квалификатором bean, чтобы вы могли автоматически подключаться, не беспокоясь об именах компонентов. Подойдет что-то похожее на приведенное ниже.

Определение общего интерфейса.

    public interface FindAndDisplayDataService {
       void formatHashrate(String hashrate);
    }

Создание профильных определений бинов, расширяющих общий интерфейс.

   @Component("findAndDisplayDataService")
   @Profile("quartz")
   public FindAndDisplayDataServiceQuartz implements FindAndDisplayDataService {
      public void formatHashrate(String hashrate){
        //do stuff based on quartz
      }
   }

   @Component("findAndDisplayDataService")
   @Profile("spring-scheduler")
   public FindAndDisplayDataServiceSpringScheduler implements FindAndDisplayDataService {
      public void formatHashrate(String hashrate){
        //do stuff based on Spring scheduler
      }
   }

И в вашем шаблоне thymeleaf вы можете внедрить любой компонент на основе @Component name findAndDisplayDataService.

0 голосов
/ 14 мая 2018

Вы можете создать UIService в качестве делегата, где вы вводите свой FindAndDisplayDataService интерфейс.Таким образом, вы можете вызывать ссылку на конкретный компонент.

...