如何使用Spring Boot在控制器中注入bean?

时间:2018-08-10 13:51:06

标签: java spring-boot

我尝试了@Autowired,但是它不起作用。

有我的豆子:

@Bean(name = "getModels")
public JSONObject getModels() throws ClassNotFoundException {
    return scannerService.getModels(Test.class , Pc.class);
}

并且有我的控制器

@RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String getAdminParams() throws JSONException, ClassNotFoundException {

    ApplicationContext context = new 
    AnnotationConfigApplicationContext(CreateModels.class);
    CreateModels createModels = (CreateModels) context.getBean("getModels");

    return createModels.toString() ;
}

2 个答案:

答案 0 :(得分:1)

这可能是您应该创建和使用bean的方式:

@Service
public class ModelService{ // or whatever
    private final ScannerService scannerService;

    @Autowired
    public ModelService(ScannerService scannerService){
        this.scannerService = scannerService;
    }

    public JSONObject getModels() throws ClassNotFoundException{
        return scannerService.getModels(Test.class, Pc.class);
    }        
}

然后在您的控制器中注入ModelService(或您输入的名称):

// your annotations
public class Controller{ // your name
    private final ModelService modelService;

    public Controller(ModelService modelService){
        this.modelService = modelService;
    }

    @RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public String getAdminParams() throws JSONException, ClassNotFoundException{
        return modelService.getModels().toString();
    }
}

这当然仅仅是一个示例,您必须对其进行调整以使其与当前代码一起使用。但是通常,将值(例如来自scannerService.getModels()的值)提供为@Bean是一个非常糟糕的主意。更好的解决方法是创建一个Holder对象。

答案 1 :(得分:0)

我解决了

有豆子

@Bean("models")
public JSONObject getModels() throws ClassNotFoundException {

    return scannerService.getModels(Test.class , Pc.class);
}

然后将其注入控制器

@Autowired
@Qualifier("models")
JSONObject models;