所以我正忙着写一个Spring Boot应用程序,但我似乎无法弄清楚如何从主应用程序将对象传递给我的RestController。
这是我的Application.java:
@SpringBootApplication
@ComponentScan("webservices")
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
Application app = new Application(ctx);
LinkedBlockingQueue<RawDate> queue = new LinkedBlockingQueue<>();
// do other stuff here
}
}
这是我的RestController:
@RestController
public class GoogleTokenController {
private LinkedBlockingQueue<RawData> queue;
@CrossOrigin
@RequestMapping(value = "/google/token", method = RequestMethod.POST, headers = {"Content-type=application/json"})
@ResponseBody
public String googleToken(@RequestBody AuthCode authCode) {
System.out.println("CODE: " + authCode.getAuthCode());
// do other stuff here
return "OK";
}
}
所以我想将LinkedBlockingQueue<RawData>
类中创建的Application
的同一个实例传递给GoogleTokenController
类。但是我不知道怎么做,因为spring会自动创建GoogleTokenController
类。
请注意我对Spring很新。感谢。
答案 0 :(得分:3)
创建要传递Spring bean的对象,让Spring将其注入控制器。例如:
@SpringBootApplication
@ComponentScan("webservices")
public class Application {
@Bean
public LinkedBlockingQueue<RawDate> queue() {
return new LinkedBlockingQueue<>();
}
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
Application app = new Application(ctx);
// do other stuff here
}
}
@RestController
public class GoogleTokenController {
@Autowired // Let Spring inject the queue
private LinkedBlockingQueue<RawData> queue;
@CrossOrigin
@RequestMapping(value = "/google/token", method = RequestMethod.POST, headers = {"Content-type=application/json"})
@ResponseBody
public String googleToken(@RequestBody AuthCode authCode) {
System.out.println("CODE: " + authCode.getAuthCode());
// do other stuff here
return "OK";
}
}
在您需要访问queue
的其他地方,也让Spring注入它。
答案 1 :(得分:0)
如何创建可以注入控制器的组件?您可以为队列创建一个单独的类
@Component
public class RawDateQueue extends LinkedBlockingQueue<RawDate> {
// no further implementations
}
并在Controller中使用RawDateQueue。
答案 2 :(得分:0)
使用 - :
@autowired
private LinkedBlockingQueue<RawData> queue;
OR
@inject
private LinkedBlockingQueue<RawData> queue;