无法注入依赖项

时间:2017-04-19 18:47:54

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

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

我创建了类似下面的课程。

package com.myclass.projecttracker.main;

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

我的spring启动应用程序主类如下所示。

    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需要一个类型为&#39; com.myclass.projecttracker.model.TrackerCrudRepo&#39;的bean。无法找到。

动作:

考虑定义类型为&#39; com.myclass.projecttracker.model.TrackerCrudRepo&#39;的bean。在你的配置中。

任何人都可以帮我确定解决这种情况的方法

2 个答案:

答案 0 :(得分:2)

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"})

答案 1 :(得分:1)

myDao用@service注释,所以spring会照顾它的创作

你应该删除

myDao MyDao = new myDao();
在Parser2类中,用@Autowired注释标记它,spring会照顾 它在Parser2类中的实例化

@Autowired 
myDao MyDao