Как создать компонент удаленно, не меняя реальный класс в Spring Boot? - PullRequest
0 голосов
/ 07 февраля 2019

Мое требование - @Autowire обычный класс Java без его изменения.Решения, которые я видел, заключаются в том, чтобы пометить этот класс @Component или @Service, но я не могу изменить реальный класс.Есть ли другой способ, которым я могу это сделать?Спасибо за любую помощь.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете создать bean-компонент с:

Таким образом, вы можете легко использовать первые два метода.Например, вы можете использовать класс, аннотированный @Configuration:

. Аннотирование класса аннотацией @ Configuration указывает, что класс будет использоваться JavaConfig как .источник определения бинов .

Вот код

@Configuration
public class MyConfig {

   @Bean
   public MyBean getMyBean() {
     MyBean myBean = ...

     return myBean;
   }
}

...

@Component
public class AnotherClass {

  @Autowired
  private MyBean myBean;

  ...
 }

Обновленный ответ с информацией, связанной с комментарием к вопроснику:

Если вы не можете использовать конструктор, вы можете получить istance класса, используя:

   @Bean
   public MyBean getMyBean() {
     MyBean myBean = MyBean.getInstance();

     return myBean;
   }

, или вы можете использовать его непосредственно в вашем классе, не используя аннотацию @Autowired, потому что это не Spring, который создает экземплярMyBean экземпляр для вас, но метод getInstance.Код будет выглядеть следующим образом:

@Component
public class AnotherClass {

                       // Creates (or get) the instance 
  private MyBean myBean = MyBean.getInstance();

  ...
 }

ПРИМЕЧАНИЕ. Если вы являетесь поклонником TDD, первое решение генерирует код, который намного проще тестировать, чем второе, поскольку нет прямой ссылки на статический * 1043.* метод, так что легче генерировать макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...