java - 我如何在 Spring Boot 中获取类的实例?
问题描述
它是一个实例连接到外部服务并不断监听它的类。
@Component
public class Service extends PollingBot {
@Value("${token}")
private String token;
@Override
public void onUpdateReceived(Update update) {
if (update.hasMessage()) {
}
}
public void sendMessageToUser(String message) {
try {
execute(sendMessage);
} catch (ApiException e) {
}
}
}
您可以看到有一个名为 sendMessageToUser 的方法可以发送消息。它不能是静态的,因为执行方法不允许静态上下文。此方法无法与其他类分离。/
所以,我必须从其他类调用这个方法。但是我不想创建额外的服务类实例,否则我有两个实例来监听更新,但我希望它是唯一的类实例。
我试图运行应用程序上下文并从中运行方法,但没有成功。
所以,我的问题很简单。我怎么能从其他类运行这个类的非静态(!)方法?
解决方案
您可以使用 @Autowired 注解在 Spring 中调用 bean 类(组件)的方法。此外,正如提到的,默认情况下,bean 在 spring 中是单例的,因此您不必担心每次都显式创建单个实例。尝试在调用类中使用以下代码:
@Autowired
private Service service;
public void sendText() {
service.sendMessage(message);
}
推荐阅读
- python - 未定义模型对象时,django rest 序列化字符串
- ssis - SSIS 错误:无法解密受保护的 XML 节点
- angular - ngModel 在与 formControlName 相同的表单字段上。支持使用反应形式的 ngModel 输入属性和 ngModelChange 事件已弃用
- javascript - 从文件导入着色器时出现编译错误。三.js + Vue.js + WebPack
- asp.net-mvc - 如何在 WebApi 中为注销操作创建 URL
- java - 基于内容的textview动态渐变背景
- javascript - 触发事件兄弟继承javascript odontogram
- git - 从 Visual Studio 2017 将项目推送到 DevOps
- c++ - 考虑到每次遍历的路径都相同,如何在不使用邻接列表的情况下在 C++ 中实现有向图?
- python - 如何将列表列表中的所有数字变成整数