[英]org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfig': Injection of autowired dependencies failed
[英]Spring Boot `org.springframework.beans.factory.BeanCreationException: Error creating bean Injection of autowired dependencies failed;
我是一名Spring Boot新手,我有一個簡單的應用程序,其中包含控制器和Thymeleaf模板。
當應用程序啟動時,為了查看是否一切正常,應該運行一個名為RepoTester
的Spring ApplicationListener
來檢查服務類的方法。 服務類調用PersonRepository
方法,該方法只是擴展了Spring的CrudRepository
。 但是,每次我嘗試運行該應用程序時,它都會給我以下信息:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repoTester': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private webapps.city2016.micro.code.service.PersonService webapps.city2016.micro.code.bootstrap.RepoTester.personService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private webapps.city2016.micro.code.repo.PersonRepository webapps.city2016.micro.code.service.PersonServiceImpl.personRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [webapps.city2016.micro.code.repo.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
但我不明白為什么。
ApplicationListener
類很簡單:
@Component
public class RepoTester implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private PersonService personService;
private static final Logger logger = Logger.getLogger(RepoTester.class);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
logger.info(RepoTester.class.getName() + ".onApplicationEvent() method called.");
// Create Person.
Person person = new Person();
person.setName("Cleo Markham");
person.setAddress("48 Alysbury Road");
person.setTelephone("34561287");
person.setEmail("c.laithwaite@collosus.net");
person = personService.save(person);
Person
類很簡單:
public class Person {
// Attributes.
private Integer personId;
private String name;
private String address;
private String telephone;
private String email;
每個屬性都有getter
和setter
方法。
該應用程序還有一個名為application.properties
的屬性文件,該文件指定要使用的Derby數據庫:
spring.datasource.driverClassName=org.apache.derby.jdbc.ClientDriver
spring.datasource.url=jdbc:derby://localhost:1527/Library
spring.datasource.username=username
spring.datasource.password=password
服務類的代碼很簡單:
@Service()
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonRepository personRepository;
private static final Logger logger = Logger.getLogger(PersonServiceImpl.class);
public PersonServiceImpl() {
}
@Override
public void delete(Integer personId) {
logger.info(PersonServiceImpl.class.getName() + ".delete() method called.");
personRepository.delete(personId);
}
@Override
public boolean exists(Integer personId) {
logger.info(PersonServiceImpl.class.getName() + ".exists() method called.");
return personRepository.exists(personId);
}
@Override
public Person findOne(Integer personId) {
logger.info(PersonServiceImpl.class.getName() + ".findOne() method called.");
return personRepository.findOne(personId);
}
@Override
public Iterable<Person> findAll() {
logger.info(PersonServiceImpl.class.getName() + ".findAll() method called.");
return personRepository.findAll();
}
@Override
public Person save(Person person) {
logger.info(PersonServiceImpl.class.getName() + ".save() method called.");
return personRepository.save(person);
}
倉庫是:
package webapps.city2016.micro.code.repo;
import org.springframework.data.repository.CrudRepository;
import webapps.city2016.micro.code.model.Person;
public interface PersonRepository extends CrudRepository<Person, Integer> {
}
我的Maven文件是:
http://maven.apache.org/xsd/maven-4.0.0.xsd“> 4.0.0 webapps.city2016.micro注冊SpringBootThymeleaf1 1.0-SNAPSHOT jar
UTF-8 1.8 1.8
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.12.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<name>RegistrationSpringBootThymeleaf1</name>
誰能告訴我我錯了嗎?
我嘗試了發布的兩個答案,但都沒有成功,因此該應用程序已通過手動編寫的DAO類轉換為Spring JDBC,並且運行良好。
任何有關JPA的建議都將受到歡迎。
您需要使用JPA注釋對Person進行注釋:
@Entity
@Table(name = "person")
public class Person {
// Attributes.
private Integer personId;
private String name;
private String address;
private String telephone;
private String email;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getPersonId() { ... }
@Basic
@Column(name = "name")
public String getName() { ... }
您可以在此處閱讀所有要求: http : //docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-jpa-and-spring-data
或檢查您是否已完成本教程中提到的所有內容: http : //spring.io/guides/gs/accessing-data-jpa/
特別檢查一下您是否具有:
@SpringBootApplication
注釋的主類 @Entity
注釋的實體類 @Id
注釋的實體上的主鍵,其類型與存儲庫(通用)的泛型類型匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.