簡體   English   中英

如何在服務類中使用帶有 @Autowired 的 JpaRepository?

[英]How can I use a JpaRepository, with @Autowired, inside a service class?

我已經閱讀了這些問題,但沒有一個有效:

Spring boot MVC - 無法在服務類中自動裝配存儲庫

為什么不能@Autowired 一個 JPA 存儲庫 - Spring boot + JPA

JpaRepository 在服務類中獲取 Null

還有這個: https ://www.baeldung.com/spring-autowired-field-null

不幸的是,他們都沒有工作。

我所擁有的是:

服務接口:

@Service
public interface DayTradeService {
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens);
}

服務實施:

public class DayTradeServiceImpl implements DayTradeService {
    
    @Autowired
    private DayTradeRepository dayTradeRepository;
    
    @Override
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens) {
        // Several lines of code and some of them is trying to use dayTradeRepository.
    }
}

我的 DayTradeRepository:

@Repository
public interface DayTradeRepository extends JpaRepository<DayTrade, Integer> {}

在我的DayTradeController (用@Controller注釋)中,我可以將 dayTradeRepository 與@Autowired一起使用。 但是在服務類中,我無法使用。 我收到這條消息:

Cannot invoke "meca.irpf.Repositories.DayTradeRepository.getDayTrades()" because "this.dayTradeRepository" is null"

我怎樣才能使它成為可能?

在我接受尼基塔的回答后編輯:

我沒有發布Controller代碼,但它沒有@Autowired服務類DayTradeServiceImpl 這就是我缺少的一點。 在尼基塔指出之后,我可以解決問題。

您不需要創建新對象。 你必須這樣打電話:

@Controller
@RequestMapping("/test")
public class TestController {

    @Autowired
    private DayTradeServiceImpl dayTradeService;


    @GetMapping(value = "/get")
    public void getTrades() {
        dayTradeService.getDayTrades(...);
    }

}

並為 DayTradeServiceImpl 設置注解@Service。

@Service
public class DayTradeServiceImpl implements DayTradeService {
    
    @Autowired
    private DayTradeRepository dayTradeRepository;
    
    @Override
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens) {
        // Several lines of code and some of them is trying to use dayTradeRepository.
    }
}

Spring 框架使用控制反轉,它有 bean 的容器。 對於檢測 bean,請使用如下注解:@Service、@Component、@Repository。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM