【问题标题】:Failed to inject the dependency注入依赖失败
【发布时间】:2017-09-16 03:50:29
【问题描述】:

我有一个春天的学习者。我正在尝试使用 spring data jpa 构建一个应用程序。

我创建了一个类似下面的类。

package com.myclass.projecttracker.main;

@Service
public class myDao {
    @Autowired
    TrackerCrudRepo trackerCrudRepo;
    public TrackerCrudRepo myclass(){
    return trackerCrudRepo; 
    }
}

我的spring boot应用主类如下。

    package com.mindtree.projecttracker.main;
    @RestController
    @EnableAutoConfiguration
    @ComponentScan(basePackages = {"com.myclass.projecttracker.main"})
    public class Parser2 {

    ResourceDetailExtractor resourceDetailExtractor = new ResourceDetailExtractor(); 

        public static void main(String[] arg) throws IOException{
            SpringApplication.run(Parser2.class, arg);

        }

        @RequestMapping("/")
        void home() throws IOException {
            //custom implimentation
        myDao MyDao = new myDao();
        TrackerCrudRepo trackerCrudRepo = MyDao.myclass();

        }


package com.myclass.projecttracker.model;

@Repository("myRepo")
public interface TrackerCrudRepo extends CrudRepository<ResourceData, Long> {

}

当你运行这个应用程序时,它会抛出一个错误


应用程序启动失败


说明:

com.myclass.projecttracker.main.myDao 中的字段 trackerCrudRepo 需要一个无法找到的“com.myclass.projecttracker.model.TrackerCrudRepo”类型的 bean。

行动:

考虑在您的配置中定义一个“com.myclass.projecttracker.model.TrackerCrudRepo”类型的 bean。

谁能帮我找出解决这种情况的方法

【问题讨论】:

  • 我在您的代码中没有看到 TrackerCrudRepo 类,也没有定义任何 @Beans。
  • TrackerCrudRepo 定义为@Component
  • TrackerCrudRepo更新了我的问题

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


【解决方案1】:

TrackerCrudRepo 位于包 com.myclass.projecttracker.model 内,但您已声明 @ComponentScan(basePackages = {"com.myclass.projecttracker.main"}) 以扫描您的组件。

因此您需要将TrackerCrudRepo 移动到包装com.myclass.projecttracker.main 或将@ComponentScan(basePackages = {"com.myclass.projecttracker.main"}) 更改为@ComponentScan(basePackages = {"com.myclass.projecttracker"})

【讨论】:

  • 当我尝试这个时,我得到org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myDao': Unsatisfied dependency expressed through field 'trackerCrudRepo'
  • 您需要在配置中添加@EnableJpaRepositories。
  • 你能告诉我我需要在哪个班级使用这个吗?
  • 在 Parser2 类中。
  • @EnableJpaRepositories 运气不好
【解决方案2】:

myDao 带有 @service 注释,因此 spring 将负责它的创建

你应该删除

myDao MyDao = new myDao();

在 Parser2 类中,用@Autowired 注解标记它,spring 会照顾 它在 Parser2 类中的实例化

@Autowired 
myDao MyDao 

【讨论】:

  • 是的,你是对的。但这并不能解决我的错误问题
  • 我已经在我自己的机器上进行了测试,它正在工作,你能不能请 @ComponentScan(basePackages = {"com.myclass"}) 而不是 @ComponentScan(basePackages = {"com.myclass.projecttracker.main"}) 在你的 Parser2 类中使用
猜你喜欢
  • 2012-08-13
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多