【问题标题】:How to make Depedency Inject in a not "RequestMapping" method如何在非“RequestMapping”方法中进行依赖注入
【发布时间】:2019-12-28 04:04:56
【问题描述】:

我可以在不是 RestController 或类似的类中访问我的存储库吗?

我有一个 WatchService 监听文件夹,读取文件并保存到数据库。我的 watchservice 就像读取文件一样工作,但是我想使用我的 JPARepository 来持久化,我可以这样做吗?

Springboot 应用 v2.1.6.RELEASE

@Repository
public interface MyRepository extends JpaRepository<MyClass, Long> { }

public class MyWatchService implements Runnable{

@Autowired
private MyRepository myRepository;

// SOME CODES COMES HERE 

@Override
public void run() {     
// SOME CODES COMES HERE 
myRepository.save(MyClass); // In this point give a nullPointerException
}

}

我得到了那个例外:

java.lang.NullPointerException
at com.WatchService.run(WatchService.java:515)
at java.base/java.lang.Thread.run(Thread.java:835)

【问题讨论】:

  • 转换为构造函数注入几乎总能解决这个问题。

标签: java spring-boot cdi


【解决方案1】:

你得到NullPointerException 因为依赖没有被注入。你正确地使用了注解,但是依赖没有被注入,通过某种魔法。

为了使其工作(即注入 bean),您需要让 DI- 或 IoC 容器为您实例化 bean(在 JEE 中为 CDI,在 Spring 中为 @ 987654322@)。这可以通过注入(d'uh!Injection-inception)或以编程方式完成。

this question 探讨了以 Spring 为中心的解决方案。

【讨论】:

  • 但是我需要明确地实例化我的类,因为它是一个线程Thread thread = new Thread(MyWatchService); thread.start();
  • 您可以检索 MyRepository 的 bean 实例,正如我链接的问题中所解释的那样,或者您必须自己进行注入,如果您使用数据库连接等其他资源,这可能会很困难, ....
猜你喜欢
  • 2017-02-10
  • 2019-10-18
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多