首页 > 解决方案 > Spring中通用实例变量的依赖Bean注入

问题描述

我正在为我的应用程序使用 Spring 4.1.5-RELEASE 和 java 8。在查看类时,需要考虑 2 个参数化,一个在类级别,另一个在类的实例变量。在依赖注入时,我在类级别参数化方面没有问题(因为我有带有 super() 的构造函数),而实例变量 serviceErrorResponseProcessor 会导致以下错误。如果从类和 bean 注入中删除 serviceErrorResponseProcessor 变量,我没有看到错误。所以在定义泛型实例变量时出了点问题。

班级:

public class ServiceResponseProcessor implements ResponseProcessor<T, R> {

private ErrorResponseProcessor<Error> serviceErrorResponseProcessor;
private ServiceInfoResponseProcessor serviceInfoResponseProcessor;

// respective getters and setters
}

豆子注入:

<bean id="responseProcessor"
    class="com.path.ServiceResponseProcessor">
    <property name="serviceErrorResponseProcessor" ref="beanServiceErrorResponseProcessor" />
    <property name="serviceInfoResponseProcessor" ref="beanServiceInfoResponseProcessor" />
</bean>

<bean id="beanServiceErrorResponseProcessor"
    class="com.path.processor.ErrorResponseProcessor"/>

<bean id="beanServiceInfoResponseProcessor"
    class="com.path.processor.ServiceInfoResponseProcessor"/>

错误:

Error creating bean with name 'responseProcessor' defined in class path resource [config/bean-dependency.xml]: 
Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
    at com.path.ServiceResponseProcessor.testResponseProcessor(ServiceResponseProcessor.java:326)
    at com.path.ServiceResponseProcessor.testSteps(ServiceResponseProcessor.java:276)
Caused by: java.lang.reflect.MalformedParameterizedTypeException
    at com.path.ServiceResponseProcessor.testResponseProcessor(ServiceResponseProcessor.java:326)
    at com.path.ServiceResponseProcessor.testSteps(ServiceResponseProcessor.java:276)

标签: javaspring-mvcdependency-injection

解决方案


我发现了一些使用 spring 4.1.5-RELEASE 对我有用的东西,那就是当它用于 bean 注入的类时,不能在实例变量中使用泛型。

班级:

public class ServiceResponseProcessor implements ResponseProcessor<T, R> {

private ServiceErrorResponseProcessor serviceErrorResponseProcessor;
private ServiceInfoResponseProcessor serviceInfoResponseProcessor;

   // respective getters and setters
}

尽管,

ServiceErrorResponseProcessor implements ErrorResponseProcessor<Error>{
   // implementation
}

豆类注入:

<bean id="responseProcessor"
class="com.path.ServiceResponseProcessor">
<property name="serviceErrorResponseProcessor" ref="beanServiceErrorResponseProcessor" />
<property name="serviceInfoResponseProcessor" ref="beanServiceInfoResponseProcessor" />


推荐阅读