如何在 Spring Boot 中创建 Bean
How to create Bean in SpringBoot
我有一个 MongoUserUrlRepository
我必须从中创建 Bean。
代码如下所示:
public class MongoUserUrlRepository extends AbstractRepositoryImpl<MongoUserId, UserUrl> implements UserUrlRepository {
public MongoUserUrlRepository(MongoClient mongoClient, String db, String collection) {
super(
mongoClient,
db,
collection,
MongoUserId::asString,
id -> MongoUserId.mongoUserId((String) id)
);
}
@Override
protected Document toDocument(UserUrl uv) {
final Document d = new Document();
uv.url.ifPresent(url -> d.put("url",url));
d.put("version", uv.version);
d.put("requestedDate", toDate(uv.requestedDate));
d.put("state", uv.state.name());
return d;
}
@Override
protected UserUrl fromDocument(Document d) {
return UserUrl.userUrl(
idFrom(d),
d.getString("url"),
d.getLong("version"),
toInstant(d.getDate("requestedDate")),
State.valueOf(d.getString("state"))
);
}
}
我试过这样创建 Bean
:
@Bean
public UserUrlRepository getUserUrlRepository(MongoClient mongoClient, String dataBase, String collection){
return new MongoUserUrlRepository(mongoClient, dataBase, collection);
}
但是mongoClient, dataBase, collection
无法识别。
我错过了什么?
您应该首先定义一个 MongoClient
bean 并指示容器在哪里可以找到 2 个字符串 dataBase
和 collection
对于 String
,您可以将它们定义为 属性 并使用 @Value
注释来注入它们。
编辑代码示例:
@Configuration
public class Config {
@Bean
public MongoClient mongoClient(){ // This bean should exist, it will be used and injected in the getUserUrlRepository(..) method
return new MongoClient();
}
@Bean
public UserUrlRepository getUserUrlRepository(MongoClient mongoClient, @Value("${database.property}") String dataBase, @Value("${collection.property}") String collection){
return new MongoUserUrlRepository(mongoClient, dataBase, collection);
}
}
当然,您应该在 application.properties 或其他地方定义 database.property
和 collection.property
。
我有一个 MongoUserUrlRepository
我必须从中创建 Bean。
代码如下所示:
public class MongoUserUrlRepository extends AbstractRepositoryImpl<MongoUserId, UserUrl> implements UserUrlRepository {
public MongoUserUrlRepository(MongoClient mongoClient, String db, String collection) {
super(
mongoClient,
db,
collection,
MongoUserId::asString,
id -> MongoUserId.mongoUserId((String) id)
);
}
@Override
protected Document toDocument(UserUrl uv) {
final Document d = new Document();
uv.url.ifPresent(url -> d.put("url",url));
d.put("version", uv.version);
d.put("requestedDate", toDate(uv.requestedDate));
d.put("state", uv.state.name());
return d;
}
@Override
protected UserUrl fromDocument(Document d) {
return UserUrl.userUrl(
idFrom(d),
d.getString("url"),
d.getLong("version"),
toInstant(d.getDate("requestedDate")),
State.valueOf(d.getString("state"))
);
}
}
我试过这样创建 Bean
:
@Bean
public UserUrlRepository getUserUrlRepository(MongoClient mongoClient, String dataBase, String collection){
return new MongoUserUrlRepository(mongoClient, dataBase, collection);
}
但是mongoClient, dataBase, collection
无法识别。
我错过了什么?
您应该首先定义一个 MongoClient
bean 并指示容器在哪里可以找到 2 个字符串 dataBase
和 collection
对于 String
,您可以将它们定义为 属性 并使用 @Value
注释来注入它们。
编辑代码示例:
@Configuration
public class Config {
@Bean
public MongoClient mongoClient(){ // This bean should exist, it will be used and injected in the getUserUrlRepository(..) method
return new MongoClient();
}
@Bean
public UserUrlRepository getUserUrlRepository(MongoClient mongoClient, @Value("${database.property}") String dataBase, @Value("${collection.property}") String collection){
return new MongoUserUrlRepository(mongoClient, dataBase, collection);
}
}
当然,您应该在 application.properties 或其他地方定义 database.property
和 collection.property
。