一些细节 我在运行下面给出的代码时遇到了一些问题。我收到以下异常。当我尝试[CrudRepository for Spring Data]的示例代码时[1]。
我有一个界面:
package com.joydeep.springboot;
import org.springframework.data.repository.CrudRepository;
import com.joydeep.springboot.vo.Message;
public interface Test1 extends CrudRepository<Message, String> { }
VO课程:
package com.joydeep.springboot.vo;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Message {
@Id
private String id;
private String text;
private String author;
private Date created;
public Message() {
super();
}
public Message(String id, String text, String author, Date created) {
super();
this.id = id;
this.text = text;
this.author = author;
this.created = created;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
}
控制器类:
package com.joydeep.springboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloCntrl {
@Autowired
Test1 test;
@RequestMapping("/hello")
public String sayHi(){
return "Hi";
}
}
初始化程序类:
package com.joydeep.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CourseAPIStarter {
public static void main(String[] args) {
SpringApplication.run(CourseAPIStarter.class);
}
}
的pom.xml:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.springboot</groupId>
<artifactId>rest-course-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Rest service course API</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
在上下文初始化期间遇到异常 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'helloCntrl'的bean时出错:通过字段'test'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有'com.joydeep.springboot.Test1'类型的限定bean可用:预计至少有1个bean有资格作为autowire候选者。依赖注释{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
我所指的例子来自这个链接。
https://spring.io/guides/gs/accessing-data-jpa/
答案 0 :(得分:10)
您无需在@Repository
上添加Test1
注释。将这3个注释放在CourseAPIStarter
类上,您的应用程序将像黄油中的热刀一样运行。
@ComponentScan(basePackages={"com.joydeep.springboot"})
@EntityScan(basePackages={"com.joydeep.springboot.vo"})
@EnableJpaRepositories(basePackages={"com.joydeep.springboot"})
@ComponentScan
将扫描您的对象,并将其注册到Spring。
@EnableJpaRepositories
将使您的所有Spring JPA存储库都能在您的应用程序中使用。
@EntityScan
:当您在模型对象类中添加@Entity
注释时,Spring将假定存在一个名为Message
的表。因此,要将此类注册为Spring Entity
,您需要使用此注释。
答案 1 :(得分:2)
Spring无法找到Test1
bean,因为您忘记使用@Repository
对其进行注释。您只能自动装配Spring托管类(Controller,Component,Repository,Service ecc)。
试试这个:
@Repository
public interface Test1 extends CrudRepository<Message, String> { }
答案 2 :(得分:0)
您的存储库界面Test1没有
@Repository
anotation。请添加它,并检查Test1类的位置是否有适当的组件扫描。
PS:请在下次格式化问题的代码部分。