私はSpring Boot初心者です。コントローラとThymeleafテンプレートを持つシンプルなアプリケーションがあります。Springブート `org.springframework.beans.factory.BeanCreationException:自動生成された依存関係のBeanインジェクションに失敗しました。
アプリケーションが起動すると、すべてが機能しているかどうかを確認するために、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("[email protected]");
person = personService.save(person);
Person
クラスは単純です:各属性のgetter
とsetter
方法では
public class Person {
// Attributes.
private Integer personId;
private String name;
private String address;
private String telephone;
private String email;
。
アプリケーションはまた、プロパティファイルには、Derbyデータベースを使用するように指定するapplication.properties
を呼びかけている:
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 RegistrationSpringBootThymeleaf1 1.0-SNAPSHOT 瓶 webapps.city2016.micro
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>
私が間違っているところ誰が助言することはできますか?
同じ問題が、残念ながら発生します。 –
すべてのゲッターに注釈を付けましたか?また、EnableJpaRepositoriesを設定ファイルに戻しましたか? –
実際の変数のゲッターに注釈が付けられても、プロジェクトはまだ失敗します。 –