Ich bin ein Spring Boot Neuling und ich habe eine einfache Anwendung, die einen Controller und eine Thymeleaf Vorlage hat.Spring Boot `org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen der Bean Injection der Abhängigkeiten mit Autowired fehlgeschlagen;
Wenn die Anwendung gestartet wird, um zu sehen, ob alles funktioniert, sollte ein Spring ApplicationListener
namens RepoTester
ausgeführt werden, um die Methoden einer Serviceklasse zu überprüfen. Die Serviceklasse ruft Methoden der PersonRepository
auf, die einfach Spring's CrudRepository
verlängert. Aber jedes Mal, wenn ich gehe, um zu versuchen, die Anwendung ausgeführt wird, es fällt über mir die Nachricht geben:
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)}
Aber ich kann nicht sehen, warum.
Die ApplicationListener
Klasse ist einfach:
@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("[email protected]");
person = personService.save(person);
Die Person
Klasse ist einfach:
public class Person {
// Attributes.
private Integer personId;
private String name;
private String address;
private String telephone;
private String email;
Mit getter
und setter
Methoden für jedes Attribut.
Die Anwendung verfügt auch über eine Eigenschaften application.properties
Angabe der Derby-Datenbank namens Datei zu verwenden: einfach
spring.datasource.driverClassName=org.apache.derby.jdbc.ClientDriver
spring.datasource.url=jdbc:derby://localhost:1527/Library
spring.datasource.username=username
spring.datasource.password=password
Der Code der Dienstklasse:
@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);
}
Und das Repository:
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> {
}
Meine Maven-Datei ist:
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 webapps.city2016.micro RegistrationSpringBootThymeleaf1 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>
Kann jemand raten, wo ich falsch bin?
Das gleiche Problem tritt leider auf. –
Haben Sie alle Getter kommentiert? Haben Sie die EnableJpaRepositories auch wieder in die Konfigurationsdatei aufgenommen? –
Auch wenn die Getter der eigentlichen Variablen selbst kommentiert sind, schlägt das Projekt immer noch fehl. –