有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring启动依赖注入请求范围的bean

我试图将一个bean注入到另一个bean中,但我想通过直接自动连接到类中来实现,而不是通过“@Configuration class”。以下是控制器类:

@Controller
public class RestfulSourceController {

    @Autowired
    Response response;

    @RequestMapping(value="/rest", method=RequestMethod.GET, produces="application/json")
    @ResponseBody
    public Object greeting() {
        return response.getResponse();
    }

}

下面是“@Configuration”类,每个类中都声明了一个bean

@Configuration
class RequestConfigurationBeans {

    @Autowired
    private ServicesRepository servicesRepo;

    @Autowired
    private HttpServletRequest request;

    @Bean(name = 'requestServiceConfig')
    @Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.TARGET_CLASS)
    public ServiceModel requestServiceConfig(){
        String serviceName = RequestUtil.getServiceName(this.request)
        ServiceModel serviceModel = servicesRepo.findByName(serviceName)
        return serviceModel
    }

}

@Configuration
public class ServletFilterBeans {

    /* I don't want to autowire here, instead I want to autowire in the Response class directly, instead of passing the bean reference into the constructor
    @Autowired
    ServiceModel requestServiceConfig
    */

    @Bean
    @Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.TARGET_CLASS)
    public Response response(){
        return new Response(/*requestServiceConfig*/);
    }

}

最后是响应类:

class Response {

    //I want to Autowire the bean instead of passing the reference to the constructor
    @Autowired
    ServiceModel requestServiceConfig

    Object response

    public Response(/*ServiceModel requestServiceConfig*/){
        //this.requestServiceConfig = requestServiceConfig

        if (requestServiceConfig.getType() == 'rest'){
            this.response = getRestfulSource()
        }

    }


    private Object getRestfulSource(){
        RestTemplate restTemplate = new RestTemplate()
        String url = requestServiceConfig.sourceInfo.get('url')
        return restTemplate.getForObject(url, Object.class)
    }
}

然而,当我像这样设置依赖注入时,我会得到一个空指针异常,因为自动连线bean“requestServiceConfig”没有实例化。我如何通过自动连接将依赖注入bean,这样就不必通过构造函数将引用传递给bean


共 (0) 个答案