Spring引导@Autowired无法初始化类

时间:2017-04-06 14:00:58

标签: java spring spring-boot spring-data-jpa autowired

我的课程如下: -

@SpringBootApplication
@ComponentScan("com.ma.demospringboot")
public class DemoSpringBootApp {
   public static void main(String[] args) {
      SpringApplication.run(DemoSpringBootApp.class, args);
   }
}

我的课程如下: -

@Service
public class TopicService {
    // if I comment out following autowired, then it is ok.
    @Autowired
    private TopicRepository topicRepository; 
}

我有以下界面: -

public interface TopicRepository extends  CrudRepository<Topic, String> {
}

我的课程如下: -

@Entity 
public class Topic {
    @Id
    private String id;
    private String name;
    private String description;

    public Topic() {
    }
}

尝试执行时出现以下错误: -

申请失败

说明

  

com.ma.demospringboot.service.TopicService中的字段topicRepository   需要一个类型的bean   'com.ma.demospringboot.repository.TopicRepository'无法做到   找到。

动作:

  

考虑定义类型的bean   您的“com.ma.demospringboot.repository.TopicRepository”   配置。

3 个答案:

答案 0 :(得分:2)

Spring容器在扫描期间没有找到您的存储库类,添加@EnableJpaRepositories以显式指定存储库类所在的包,如下所示:

  @SpringBootApplication
  @ComponentScan("com.ma.demospringboot")
  @EnableJpaRepositories("com.ma.demospringboot.repository")
  @EntityScan(basePackages = "com.ma.demospringboot.domain")
  public class DemoSpringBootApp {
      //your current code here
  }

<强> UPDATE1:

  

不是托管类型:class com.ma.demospringboot.domain.Topic

现在,您的Topic实体类未找到,因此您需要@EntityScan(basePackages = "com.ma.demospringboot.domain")来扫描实体类(如上所示)。

<强> UPDATE2:

  

我完全按照你的建议做了,但没有工作

您打包类的方式存在问题,请仔细检查,同时确保已编译/构建最新的类。由服务器使用。

答案 1 :(得分:1)

您的Spring容器无法找到并识别您的JPA存储库。

@EnableJpaRepositories("com.ma.demospringboot.repository")课程

上添加DemoSpringBootApp
@SpringBootApplication
@ComponentScan("com.ma.demospringboot")
@EnableJpaRepositories("com.ma.demospringboot.repository")
public class DemoSpringBootApp {
   public static void main(String[] args) {
      SpringApplication.run(DemoSpringBootApp.class, args);
   }
}

答案 2 :(得分:0)

在ApplicationContext.xml中添加以下代码

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />