如何在 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 个字符串 dataBasecollection 对于 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.propertycollection.property