注入具有泛型类参数的构造函数的泛型bean的方法

时间:2016-01-04 07:30:43

标签: java spring generics autowired spring-annotations

我有泛型类ObjectDaoReflect<T extends BaseEntity>它与reflaction一起工作,因为类型擦除它有带泛型类参数public ObjectDaoReflect(Class<T> objectClass)的构造函数。我的想法是在Spring实例化之前添加自定义逻辑(它的原型bean),并读取关于Spring的一般信息,其中spring将注入我的bean,使用此代码我可以读取genereic字段类

(Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]

我喜欢将它传递给我的bean构造函数。有没有办法在bean自动装配之前添加这个自定义逻辑?一般来说,我需要读取字段,弹簧将注入我的bean,读取它的泛型类型并将其传递给我的bean构造函数(或setter)。这有什么例子吗?或者我可能需要使用自定义注释而不是自动连接并使用BeanPostProcessor postProcessBeforeInitialization?

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

<bean id="blaBean" class="bla.bla.BlaBeanImpl">
         <constructor-arg type="java.lang.Class" value="#{(CheckClassUtil.shouldUseFoo()) ? 'bla.bla.Foo' : 'bla.bla.Bar'}"/>
   </bean>

在EL中使用您的逻辑来选择构造函数参数作为类。 您可以创建将类名作为String返回的静态方法,并通过EL调用它来设置constructor-arg元素的'value'参数。