当前位置: 首页 > 知识库问答 >
问题:

手动实例化Spring MongoRepository

邹海超
2023-03-14

我正在尝试用EmbeddedMongoDB测试我的spring data mongodb存储库,这些存储库是从MongoRepository扩展的接口。与本教程一样,我希望创建不使用spring应用程序上下文的测试,如果我在存储库类中使用普通mongoTemplate,这是可以实现的。

因此,是否可以通过传递Mongo&MongoTemplate实例,使用提供的实用工具方法来实例化MongoRepository接口实现。我认为spring在启动时会自动执行此操作。

共有1个答案

杭令
2023-03-14

据我所知,您希望在不使用xml配置的情况下测试应用程序。与您的教程一样,应用程序上下文在java类或xml文件中的配置最终是相同的。

对于我的测试,我使用Junit并调用xml配置,如下所示:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:META-INF/spring/applicationContext-mongo.xml"})
    public class LicenseImplTest extends AbstractJUnit4SpringContextTests {

        // Inject all repositories:
        @Autowired
        private IMyRepository myRepository;
    }

例如,在我的applicationContext-mongo.xml中,我有:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:META-INF/spring/database.properties"></property>
    </bean>

    <mongo:db-factory dbname="${mongo.database}" host="${mongo.host}" id="mongoDbFactory" port="${mongo.port}" write-concern="SAFE" />

    <mongo:repositories base-package="fullpackage.repositories" />       

    <!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
    <context:annotation-config />

    <bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
    </bean>


</beans>  
    <mongo:repositories base-package="fullpackage.repositories" />       
 类似资料:
  • 问题内容: 我有一个带有@Inject注释的字段的类。我使用反射实例化了Class,但是我希望CDI注入实例来执行Class实例字段。有办法吗? 有人知道该怎么做吗?如果有一种无需使用反射扫描每个字段的方法,我将不胜感激。 提前致谢。 问题答案: 这完成了工作 SomeBean bean = CDI.current()。select(SomeBean.class).get();

  • 我的JavaEE应用程序中有一个单例类。我通过使用注释类并让CDI处理所有事情来实现这一点。 我的问题是,我是否可以防止这个类的意外手动实例化,因为CDI要求我有一个非私有的无参数构造函数? “经典”非CDI解决方案将有一个私有构造函数、一个静态字段和一个返回此实例的静态工厂方法。

  • 例1 如前所述,上面的编译和链接没有问题。然而,在实际应用程序中,我有许多函数模板和许多枚举成员。因此,我试图通过将成员分组到一个新类中来使我的生活变得更轻松,这个类本身依赖于模板参数,并为每个枚举值显式地实例化该类。 例2 编辑:用户2B-T通过https://www.onlinegdb.com/hygr7w0fv_提供了这些示例,供人们进行实验。

  • 假设你有一个绘制了很多模型的场景,而大部分的模型包含的是同一组顶点数据,只不过进行的是不同的世界空间变换。想象一个充满草的场景:每根草都是一个包含几个三角形的小模型。你可能会需要绘制很多根草,最终在每帧中你可能会需要渲染上千或者上万根草。因为每一根草仅仅是由几个三角形构成,渲染几乎是瞬间完成的,但上千个渲染函数调用却会极大地影响性能。 如果我们需要渲染大量物体时,代码看起来会像这样: for(un

  • 阅读一些源代码,我偶然发现了这个spring bean

  • 我有一个Spring集成流项目,它公开了一个Rest网关,在接收到Rest POST请求后,它会执行一些较小的逻辑。基于一些有效载荷参数,我想动态激活另一个Spring集成流,并将消息路由到该流中的指定通道,我可以在基于有效载荷的主流中发现该通道。子流将把响应消息放在主流中定义的指定通道中。 我如何才能实现这一点。