Как создать bean и autowire, если у конструктора есть параметры? - PullRequest
0 голосов
/ 03 апреля 2020

Меня интересует конфигурация Java без. xml. У меня есть следующий класс:

public class MyClient extends org.java_websocket.client.WebSocketClient;
 {

    public MyClient(URI serverUri, Draft draft) {
        super(serverUri, draft);
    }

    public MyClient(URI serverURI) {
        super(serverURI);
    }

    public MyClient(URI serverUri, Map<String, String> httpHeaders) {
        super(serverUri, httpHeaders);
    }

Затем у меня есть другие классы, расширяющие MyClient:

MyClient1 extends MyClient;
MyClient2 extends MyClient;

Для создания объекта из них первый конструктор used:

public MyClient(URI serverUri, Draft draft) {
        super(serverUri, draft);

Вопрос в том, как создать соответствующие bean-компоненты и автоматически связать их с Spring Boot Controller? (скажем, контроллер из этого примера):

@Controller
public class GreetingController {
  @MessageMapping("/hello")
  @SendTo("/topic/greetings")
  public Greeting greeting(HelloMessage message) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
  }

}

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете взять бин от ApplicationContext Пример:

@Controller
public class GreetingController {

    @Autowired
    private ApplicationContext applicationContext;

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {

        MyClient myClient = (MyClient) applicationContext.getBean("myClient", param1, param2, ...);
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
    }

}
...