![](/img/trans.png)
[英]Is it possible to use Spring 3 @Autowired annotation inside @Service?
[英]Requirements to use Spring Autowired annotation
我上周開始學習 Spring Boot,所以我仍然掌握了一切。 Autowired 看起來不錯,但是在存儲庫等字段上使用它時,我偶爾會遇到麻煩。 我已經嘗試搜索使用它的要求,但我真的找不到明確的來源。
例如,如果有錯誤,請糾正其中任何一個,我知道:
我必須自己找到第 2、3 和 4 點。 它們沒有在任何地方列出,我只在其他 StackOverflow 答案中遇到過它們。
那里還有什么? 本質上,我有:
@Component
public class BookSearchClient {
@Autowired
private BookRepository bookRepository;
public List<Book> processBookResult(String json) {
GoogleBook googleBooks = JsonUtil.googleBookFromJson(json);
List<Book> bookList = ConversionUtil.googleBooksToSimpleBooks(googleBooks);
for (Book book : bookList) {
bookList.add(book);
if (findBook(book) == null) {
bookRepository.save(book);
}
}
return bookList;
}
private Book findBook(Book book) {
Book foundBook = bookRepository.findByIsbn13(book.getIsbn13());
if (foundBook == null) {
foundBook = bookRepository.findByIsbn10(book.getIsbn10());
}
return foundBook;
}
}
接着:
@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
Book findByIsbn10(String isbn10);
Book findByIsbn13(String isbn13);
}
到目前為止,我遇到了所有這些問題,但仍然收到 bookRepository 的 null 指針異常。 控制器在沒有我在存儲庫上使用@Repository
的情況下工作,但我想我會添加它以查看它是否有幫助(它沒有幫助)。 我有類似的類也符合上面列表中概述的模式(特別是@RestController
s),但在這種情況下它不起作用。 我知道我錯過了一些東西,我只是不知道它是什么。
我還通過制作BookSearchClient
Autowired
解決了這個問題。 我想在上面的列表中添加另一個點(並且不相關,可能根據@sarcode 刪除第 3 點),似乎整個鏈上的每個 object 也需要@Autowired
。
試試這個。 它應該工作。
@RestController
public class BookController
{
@Autowired
BookSearchClient bookSearchClient;
}
@Service
public class BookSearchClient {
@Autowired
private BookRepository bookRepository;
public List<Book> processBookResult(String json) {
GoogleBook googleBooks = JsonUtil.googleBookFromJson(json);
List<Book> bookList = ConversionUtil.googleBooksToSimpleBooks(googleBooks);
for (Book book : bookList) {
bookList.add(book);
if (findBook(book) == null) {
bookRepository.save(book);
}
}
return bookList;
}
private Book findBook(Book book) {
Book foundBook = bookRepository.findByIsbn13(book.getIsbn13());
if (foundBook == null) {
foundBook = bookRepository.findByIsbn10(book.getIsbn10());
}
return foundBook;
}
}
@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
Book findByIsbn10(String isbn10);
Book findByIsbn13(String isbn13);
}
你的第三點是無效的。 您可以在配置 class 中顯式創建一個 bean 實例,並通過 @Autowired 注釋調用它。
@Configuration
public class BookConfig
{
@Bean
public <className> getBean()
{
return new <className>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.