我有一个类,它有一个通过构造函数参数注入(inject)的 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>
但是我收到了 bean.xml 的错误消息:
No setter found for property 'port' in class 'com.mongodb.MongoClient'
来自 MongoDB 的 Javadoc ,类 MongoClient
没有用于 host
和 port
属性的 setter 方法。那么我如何才能将值注入(inject)到这个 Mongo bean 中呢?
最佳答案
MongoClient
类似乎有一个 constructor
MongoClient(String host, int port)
因此您可以使用 constructor-based dependency injection
<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>
关于java - 如何在这个 MongoDB 连接案例中注入(inject)一个 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852328/