Java 在这种MongoDB连接情况下如何注入bean?
我有一个类,它有一个通过构造函数args注入的MongoDB客户端成员: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
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>