【发布时间】:2017-09-27 12:24:07
【问题描述】:
我的应用程序正在监听一个交换(使用rabbitMQ),期望接收一些 API 数据,然后应该将其重定向到相关位置。
我使用rxJava 订阅这些更改,目的是打开一个新线程并通过每次创建RestClient 发送请求 -> 它将接收数据,解析它,发送它并然后将响应发送回队列。
我的问题是我希望每次都创建一个新的 RestClient 实例。想过使用 Springs Scope 注释:@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE),但似乎无法理解如何使用它,如果我每次使用 new RestClient 会有什么区别。
您能解释一下使用getBean 相对于使用new 的优势吗?
代码如下:
class MyManager {
@Autowired
private WebApplicationContext context;
....
...
...
@PostConstruct
myListener.subscribeOn(Schedulers.computation()).subscribe(this::handleApiRequest);
private void handleApiRequest(ApiData apiData){
// Option 1:
RestClient client = new RestClient();
client.handleApiRequest(apiData);
//Option 2:
// use somehow the prototype?
RestClient x = (RestClient)context.getBean("restTest")..
}
}
@Service
//@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //NEEDED??
class RestClient {
private String server;
private RestTemplate rest;
private HttpHeaders headers;
ResponseEntity<String> responseEntity;
@PostConstruct
private void updateHeaders() {
headers.add(Utils.CONTENT_TYPE, Utils.APPLICATION_JSON);
headers.add(Utils.ACCEPT, Utils.PREFIX_ALL);
}
public void handleApiRequest(ApiData apiRequest) {
sendRequest(apiRequest); //implemented
sendResponse(); //implemented
}
}
@Bean(name = "restTest")
@Scope("prototype")
public RestClient getRestTemplate() {
return new RestClient();
}
【问题讨论】:
标签: java spring spring-mvc annotations rx-java2