【问题标题】:@Autowired returns null@Autowired 返回 null
【发布时间】:2017-03-13 06:47:22
【问题描述】:

这是我的仓库

@Service
public class FuneralPricingRepository {

    @PersistenceContext
    private EntityManager em;  //this is null

    public List<FuneralPricing> findAll() {
        return this.em.createNativeQuery("SELECT * FROM FUNERALPRICING").getResultList();
    }
}

AS400calls 是自动接线的,但葬礼定价存储库不是。

public class TestFuneralPremiumProvider implements TestHandler {

    @Autowired
    private As400Calls as400Calls; //this is not null

    @Autowired
    private FuneralPricingRepository funeralPricingRepository; //this is null

请帮忙...

【问题讨论】:

  • 检查FuneralPricingRepository的包是否在componentscan路径中?
  • @Autowired 不能是 null。如果无法解决依赖关系,您的应用程序将会崩溃。如果不是这种情况,您没有使用自动连接或正在自己构建TestFuneralPremiumProvider 的实例。

标签: java spring-boot


【解决方案1】:

我认为这个问题

TestFuneralPremiumProvider 

在配置中没有注解@Component 或声明bean

【讨论】:

  • 那为什么As400Calls 不为空呢?
【解决方案2】:

你不能以这种方式注入EntityManager。而是注入EntityManagerFactory。然后两种注射都应该起作用。

实体管理器只能注入在事务内部运行的类中。换句话说,它只能注入到 EJB 中。其他类必须使用 EntityManagerFactory 来创建和销毁 EntityManager。

-Source

您的Repository 是否在组件扫描路径的包中?如果还没有,请添加

@ComponentScan("com.my.package.where.repository.is")

另一件事是您的存储库。不使用Spring Data JPA的原因是什么?只需扩展CRUDRepository 即可免费获得findAll 和更多方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2016-10-28
    相关资源
    最近更新 更多