使用反射按类类型查找对象以实例化Spring Data Repository

时间:2013-02-28 19:14:13

标签: spring spring-data

我正在尝试在我的数据库应用程序中进行“按类型查找”研究。 特别是,我有一个类型的层次结构:母亲< - Child1,Child2。 我有3个相应的存储库,即注释@Repository和扩展PagingAndSortingRepository的类。

现在,我有一个控制器需要在数据库中加载Child1(或Child2)类型的所有实例。

这是我对ControllerClassForTheSearch类中方法的建议:

public List<? extends Mother> findMotherByType(Class classToSearch)
        throws FindException {

    PagingAndSortingRepository<? extends Mother, Long> repo;
    try {
        repo = beanFactory.createBean(classToSearch);
    } catch (Exception e) {
        throw new FindException (this
                .getClass().getName(), classRepository);
    }

    return repo.findAll();
}

beanFactory变量在同一个类中定义如下:

@Controller
public class ControllerClassForTheSearch implements BeanFactoryAware {
    private AutowireCapableBeanFactory beanFactory;

    @Override
    public void setBeanFactory(final BeanFactory beanFactory)
        throws BeansException {
       this.beanFactory = (AutowireCapableBeanFactory) beanFactory;
    }
    [...] // rest of the class code

然而,它不起作用:我的存储库是接口,因此无法创建它们(这是我得到的错误)。 在其他类中,存储库是自动装配的变量,它们工作正常,包括Mother,Child1和Child2。

您对我如何找到Child1类型的结果有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可能想看一下Spring Data Commons中的Repositories帮助器类。您可以从ListableBeanFactory创建一个,然后按托管域类型访问存储库。

答案 1 :(得分:0)

我用getBean替换了createBean,它可以工作。