java - 如何在构造函数中使用@Autowired 对象?
问题描述
Autowired 类在构造函数中为空
我有以下代码结构,其中 Bar 类中的 Autowired Foo 类为空。尝试在 Bar 中创建 Foo 的对象,但随后 @Autowired Doo 变为空。
@Service
public class Doo{
public String getString(){
return "String";
}
}
@RestController
@Component
@RequestMapping(value = "/do/something", method = RequestMethod.GET)
public class Foo {
@Autowired
private Doo doo;
// method
public String getString(){
return doo.getString();
}
}
@Component
public final class Bar {
@Autowired
Foo foo;
private static final Bar bar = new Bar();
private Bar (){
foo.getString();
}
public static Bar getInstance(){
return bar;
}
}
解决方案
您的代码有点混乱,因为Bar
没有做任何事情。
我测试了以下代码并且它正在工作:
Foo.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Component
public class Foo {
@Autowired
private Doo doo;
@RequestMapping(value = "/do/something", method = RequestMethod.GET)
public String getString() {
return doo.getString();
}
}
斗.java
import org.springframework.stereotype.Service;
@Service
public class Doo {
public String getString() {
return "String";
}
}
实例化控制器不是最佳实践,因为业务逻辑应该在服务类上进行。
正如@benji2505 指出的那样,您的问题也有一些错别字。
我将 RequestMapping 注释更改为方法级别,您可以保持原样,但您还需要按照以下方式向方法添加 RequestMapping: 有人可以解释一下类级别控制器和方法级别控制器之间的区别吗?
推荐阅读
- http - NGINX(作为代理)如何处理读/写竞争条件?
- python - Discord.py,制作服务器锁定命令。未按预期工作
- javascript - 使用 HttpClient 的模块应该在导入中声明 HttpClientModule 吗?
- reactjs - 如何使用 filterDropdown 过滤 antd 表?
- java - java jsoup - 如何从通过文本搜索的href中获取所有链接
- node.js - 部分文本搜索(查找)在我的快速应用程序上不起作用
- android - Android BLE 设备、位置权限和新的 Google Play 家庭政策
- azure-ad-domain-services - Azure ADDS 中的 SamAccountName
- ios - 将 iOS Hybrid App 从 UIWebView 迁移到 WKWebview
- javascript - 我的脚本无法通过跨度循环