Spring 启动 - 自动装配 MongoClient

Spring Boot - Autowired MongoClient

我现在很困惑,我想在我的控制器 classes 之一中使用 @Autowired MongoClient 属性,但没有成功。棘手的部分是@Autowired 正在从我的@RestController 工作。

@RestController
public final class WebController {

  /** mongoClient */
  @Autowired
  private MongoClient mongoClient; <- here it's working ...
...
}

但是:

@Controller
public final class MongoUsersDAO {

  /** mongoClient */
  @Autowired
  private MongoClient mongoClient; <- not working ...
...
}

这里我得到空值。

我不认为问题出在组件扫描上,而我的@SpringBootApplication 位于 x.y.z,我的@RestController 位于 x.y.z.t 和我的@Controller 在 x.y.z.k 包中,因此它们的展位应该由 Spring。 (Eclipse 还将我的@Controller 标记为 Spring class)

那还有什么问题?

注意: 如果我将它添加到我的@Controller 它工作正常但@Autowired 仍然无法工作:

@PostConstruct
  public void init() {
    System.out.println("INIT");
  }

注意:在提到的 MongoUsersDAO 中,自动装配的东西根本不起作用,我试图从 application.properties 中获得一个简单的 属性,但没有成功。

出现问题是因为您在 WebController class 中调用了 new MongoUserDAO(),正如您在问题下方的评论中提到的那样。如果您手动实例化一个对象并且您的字段用 @Autowired 注释,那么这个字段将不会用预期的实例实例化。

直接将 MongoUsersDAO 注入到您的 WebController class,如下所示,Spring 将处理注入 MongoClientMongoUserDAO class 给你。

网络控制器 :

@RestController
public final class WebController {

    /** Service/Repository class*/
    @Autowired
    private MongoUsersDAO dao; 

    @GetMapping("/all")
    public String getAll(){
        dao.callSomeMethod();
     }
}

MongoUsersDAO:

@Repository
public final class MongoUsersDAO {

  /** mongoClient */
  @Autowired
  private MongoClient mongoClient; 
...
}