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 将处理注入 MongoClient
到 MongoUserDAO
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;
...
}
我现在很困惑,我想在我的控制器 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 将处理注入 MongoClient
到 MongoUserDAO
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;
...
}