如何连接 Spring Bean 和 Telegram Bot common java class?
How to wire Spring Bean and Telegram Bot common java class?
我有一个标准的 TelegramBot 实现,例如:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
...
TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
telegramBotsApi.registerBot(new Bot());
...
和机器人 class:
public class Bot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
Message inMessage = getMessage(update);
fireMessage(inMessage.getChatId(), "TEST");
}
....
而且我有像
这样的 JPA 存储库
@Repository
public interface BondsRepo extends JpaRepository<Bond, Long>{
List<Bond> findAllByUser(ArNoteUser user);
}
我在我的控制器中使用没有任何问题:
@RestController
@RequestMapping("/investing")
public class InvestController {
private final BondsRepo bondsRepo;
public InvestController(BondsRepo bondsRepo) {
this.bondsRepo = bondsRepo;
}
...
但是当我在 Bot class 中使用那个 repo 时,我自然会得到 NPE,因为 Bot.class 是一个常见的 Java class,但是 BondsRepo 是 Spring Bean 并且它在 Spring 上下文之外不可访问。
在我的 Bot class 中使用 JPA Repo 访问数据的正确方法是什么?
我认为您应该通过构造函数将存储库注入 Bot.class。
为此,您可以在主程序中从 SpringContext 检索一个 bean:
...
ConfigurableApplicationContext appContext = SpringApplication.run(Application.class, args);
BondsRepo repo = appContext.getBean(BondsRepo.class);
Bot bot = new Bot(repo);
...
telegramBotsApi.registerBot(bot);
...
我有一个标准的 TelegramBot 实现,例如:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
...
TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
telegramBotsApi.registerBot(new Bot());
...
和机器人 class:
public class Bot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
Message inMessage = getMessage(update);
fireMessage(inMessage.getChatId(), "TEST");
}
....
而且我有像
这样的 JPA 存储库@Repository
public interface BondsRepo extends JpaRepository<Bond, Long>{
List<Bond> findAllByUser(ArNoteUser user);
}
我在我的控制器中使用没有任何问题:
@RestController
@RequestMapping("/investing")
public class InvestController {
private final BondsRepo bondsRepo;
public InvestController(BondsRepo bondsRepo) {
this.bondsRepo = bondsRepo;
}
...
但是当我在 Bot class 中使用那个 repo 时,我自然会得到 NPE,因为 Bot.class 是一个常见的 Java class,但是 BondsRepo 是 Spring Bean 并且它在 Spring 上下文之外不可访问。
在我的 Bot class 中使用 JPA Repo 访问数据的正确方法是什么?
我认为您应该通过构造函数将存储库注入 Bot.class。
为此,您可以在主程序中从 SpringContext 检索一个 bean:
...
ConfigurableApplicationContext appContext = SpringApplication.run(Application.class, args);
BondsRepo repo = appContext.getBean(BondsRepo.class);
Bot bot = new Bot(repo);
...
telegramBotsApi.registerBot(bot);
...