通用Spring Bean - 复制类型参数

时间:2015-01-21 16:37:27

标签: java spring generics

我正在使用Spring 4。 我有以下Java Config片段:

@Bean
public Service<FooType> serviceBean() {
  return new ServiceImpl<FooType>(FooType.class);
}

以下的Spring Bean:

public class ServiceImpl<T> implements Service {

private final Class<T> clazz;

  public ValidateOrderServiceImpl(final Class<T> clazz)
      this.clazz = clazz;
   }
}

我宁愿不必复制type参数,但如果我不作为构造函数传入,则T为null,即以下内容不起作用。这是预期的。我已经看过一些讨论擦除的相关帖子 - 以及如何使用类型参数来解析正确使用的bean - 但是在我的问题上没有看到明确的...

// Java Config Snippet (desired)
@Bean
public Service<FooType> serviceBean() {
  return new ServiceImpl<FooType>();
}

// Spring Bean(所需)

public class ServiceImpl<T> implements Service {

// T populated..
private final Class<T> clazz;

}

由于

1 个答案:

答案 0 :(得分:1)

你原来的很好并且(几乎)是获得相应类型参数的Class对象的唯一方法。

你可以在这里删除显式类型参数

@Bean
public Service<FooType> serviceBean() {
    return new ServiceImpl<>(FooType.class);
    //                    ^^
}