晚上好,
由于我是 Java 和 Spring Boot 的新手,我的以下问题对你们大多数人来说可能听起来很简单,但我想问一下当 autowiring 模型时我做错了什么 - 如果我是,请原谅java/spring boot 和 python/django 的混合术语 - 在我的 spring boot 测试中。
按照一些简单的步骤设置测试项目:
使用 start.spring.io
创建了示例项目项目:Maven,语言:Java,Spring Boot 3.2.3,Java:21
创建了一个名为 Book.java 的小模型类和一个名为 BookRepository.java
的存储库创建了一个占位符测试并尝试运行它
目录:
├── src
├── main
│ ├── java
│ │ ├── com.example.demo
│ │ │ ├── book
│ │ │ │ ├── models
│ │ │ │ | └── Book.java
│ │ │ │ ├── repository
│ │ │ │ │ └── BookRepository.java
│ │ │ └── DemoApplication.java
│ └── resources
├── test
│ ├── java
│ │ ├── com.example.demo
│ │ │ ├── book
│ │ │ │ ├── models
│ │ │ │ │ └── BookTest.java
├── ...
Book.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "books")
public class Book {
@Id
private String isbn;
@Column(unique = true, nullable = false)
private String title;
@Column(nullable = false)
private Integer pages;
@Column(nullable = false)
private boolean available = true;
}
BookRepository.java
public interface BookRepository extends CrudRepository<Book, String> {
}
BookTest.java
@SpringBootTest(classes = DemoApplication.class)
public class BookTest {
@Autowired private BookRepository bookRepository; // <-- works fine
@Autowired private Book book; // <-- throws error
@Test
@DisplayName("Placeholder")
public void testPlaceholder() {
System.out.println("Placeholder test get's executed!");
}
}
现在,每当我尝试 autowire 书籍类时,运行测试时都会抛出以下错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.demo.book.BookTest': Unsatisfied dependency expressed through field 'book': No qualifying bean of type 'com.example.demo.book.models.Book' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
有人可以向我解释我做错了什么或者我在这里失踪了吗?显然,错误来自我的 Book.java,但是我必须从那里添加/更改/删除某些内容以及为什么?
提前致谢,祝周日愉快!
你可以参考这个问题。 您还可以检查 Spring 文档中的Autowiring。