Spring Boot - 自动连接的MongoClient

时间:2017-10-07 14:13:06

标签: spring spring-boot autowired

我现在非常困惑,我想在我的一个Controller类中使用@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位于 xyz ,我的@RestController位于 xyzt ,我的@Controller位于 xyzk 包,因此应该由Spring扫描它们的展位。 (Eclipse还将我的@Controller标记为Spring类)

那么还有什么问题呢?

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

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

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

1 个答案:

答案 0 :(得分:1)

您的问题发生了,因为您已在new MongoUserDAO()课程中调用WebController,如您在问题下方的评论中所述。如果您手动实例化对象并且您使用@Autowired注释了字段,那么此字段将不会使用预期实例进行实例化。

直接将MongoUsersDAO注入您的WebController课程,如下所示,Spring会为您处理MongoClient课程注入MongoUserDAO

WebController

@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; 
...
}