Spring:将对象从Application传递给RestController

时间:2016-07-06 12:57:09

标签: java spring

所以我正忙着写一个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很新。感谢。

3 个答案:

答案 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;