【问题标题】:Mongo custom repository autowired is null自动装配的 Mongo 自定义存储库为空
【发布时间】:2014-04-22 16:00:39
【问题描述】:

我尝试自动装配我的自定义 mongo 存储库(并且似乎执行了构造函数)但结果仍然为 null

我看过一些类似的问题 Spring Data Neo4j - @Autowired Repository == nullspring data mongo repository is null

但我仍然不知道如何解决这个问题。

public class TestRepo {

@Autowired 
PersonRepository repository;

public void find(String name)
   {
        System.out.println(repository.findByName(name));
   }

}

配置

<mongo:repositories base-package="com.yyyy.zzz" />

PersonRepository

public interface PersonRepository extends Repository<Person, BigInteger> {

@Query("{name : ?0}")
public Person findByName(String name);
}

实施

public class PersonRepositoryImpl implements PersonRepository{

PersonRepositoryImpl()
{
   System.out.println("constructing");
}

public Person findByName(String name) {
    ...
}

}

如果我直接从上下文中获取存储库 bean,它就可以工作

【问题讨论】:

    标签: mongodb repository spring-data


    【解决方案1】:

    您的存储库设置看起来很可疑。要执行查询方法,您根本不需要提供实现。我怀疑在您当前的设置中,您在PersonRepositoryImpl 中拥有的自定义实现“覆盖”了查询方法,因此在执行时将是首选。

    如果你只是删除你的实现类,Spring Data 会在调用时自动为你执行查询。

    一般来说,自定义实现类仅用于您无法通过其他方式(查询方法、Querydsl 集成等)获得的功能。

    【讨论】:

    • 它仍然没有解决问题,我的存储库仍然为空,无论我使用自定义 impl 还是生成的。使用自定义 impl 时,我得到输出 "constructing" ,所以我不明白为什么存储库为空,如果肯定生成了它的实例
    • 你有没有机会在 GitHub 等上创建一个小示例项目?感觉就像你迷失了细节。我建议先不使用自定义实现,然后让它工作。对于您帖子中显示的当前设置,您实际上根本不需要它。这似乎只会造成混乱,这就是为什么我建议一开始就将其从设置中删除。
    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2013-11-04
    • 2021-08-12
    • 2015-01-21
    • 2016-08-08
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多