Java 在这种MongoDB连接情况下如何注入bean?

Java 在这种MongoDB连接情况下如何注入bean?,java,spring,mongodb,dependency-injection,Java,Spring,Mongodb,Dependency Injection,我有一个类,它有一个通过构造函数args注入的MongoDB客户端成员: public class MyDAO { private MongoClient mongoClient; public MyDAO(MongoClient mongoClient) { this.mongoClient = mongoClient; /*mongoClient = new MongoClient("localhost", 27017);*/ //T

我有一个类,它有一个通过构造函数args注入的MongoDB客户端成员:

public class MyDAO {

    private MongoClient mongoClient;

    public MyDAO(MongoClient mongoClient) {
        this.mongoClient = mongoClient;

        /*mongoClient = new MongoClient("localhost", 27017);*/   //This would be the way without using DI.

    }
}
我的bean配置文件bean.xml如下所示:

<bean id="myDao" class="com.example.MyDAO">
        <constructor-arg ref="mongo" />
</bean>

<bean id="mongo" class="com.mongodb.MongoClient">
        <property name="host" value="localhost" />
        <property name="port" value=27017 />
</bean>

在MongoDB中,类
MongoClient
没有用于
host
port
属性的setter方法。那么如何将值注入到这个Mongobean中呢?

MongoClient类似乎有一个

因此,您可以使用


注意:由于参数名称并非始终可用(不是通过反射,而是通过字节码操作),因此可以使用始终可用的参数类型来区分

<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg type="java.lang.String" value="localhost" />
    <constructor-arg type="int" value="27017" />
</bean>

由于
MongoClient
类没有
端口
主机
的设置器,但支持在构造函数中传递
主机
端口
值,因此可以使用
构造函数参数
切换
属性

<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg name="host" type="java.lang.String" value="localhost" />
    <constructor-arg name="port" type="java.lang.Integer" value="27017" />
</bean>


谢谢。所以如果我把
放在没有引号的地方,它仍然会给我错误
port
是一个
int
,为什么我需要将它像
字符串一样放在引号中呢?不要删除引号,尝试将port参数的类型设置为
type=“java.lang.Integer”
@tonga。引号是XML格式的一部分,不是Spring特有的。它们是属性值所必需的。@SotiriosDelimanolis因此,无论参数的类型是什么,我们都应该为
value
attribute使用引号,对吗?谢谢。为值注入指定
type
属性是否总是更好?正如@Sotirios Delimanolis所说,有时参数/参数名称无法通过反射获得,然后使用参数类型来匹配正确的参数。无论如何,我建议您继续提供parameter/constructor-arguments类型,因为它至少更简洁易读。:)
<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg name="host" value="localhost" />
    <constructor-arg name="port" value="27017" />
</bean>
<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg type="java.lang.String" value="localhost" />
    <constructor-arg type="int" value="27017" />
</bean>
<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg name="host" type="java.lang.String" value="localhost" />
    <constructor-arg name="port" type="java.lang.Integer" value="27017" />
</bean>