我现在非常困惑,我想在我的一个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获取一个简单的属性,但没有成功。
答案 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;
...
}