向我的Spring Boot项目添加新的依赖项会破坏现有的@Autowired设置

时间:2018-08-02 17:28:11

标签: java maven spring-boot

我遇到一个令人困惑的@Autowired问题,该问题仅在我向自己的项目之一添加依赖项之后发生。

这里是情况:

我正在扩展一项服务,该服务具有自动连接的存储库。这是简化版:

package com.opt.custom.domain;

import com.opt.repo.RepositoryOne;
import com.opt.repo.RepositoryTwo;

    @Primary
    @Service("CustomDomainServiceImpl")
    public class CustomDomainServiceImpl extends DomainServiceImpl {

        private RepositoryOne repo1;
        private RepositorTwo repo2;

        @Autowired
        public CustomDomainServiceImpl(RepositoryOne repo1
                , RepositorTwo repo2) {
            super(repo1, repo2);
        }
        ....
    }

这一直很好-不管我是否将它们包含为属性,@ Autowired标记都能很好地捕获存储库,因为除了馈送给父服务外,我不使用它们。

但是,我创建了另一个服务(具有其自己的服务,存储库等)。当我将此新服务添加为上述项目的依赖项(在POM文件中)时,即使我在此类中未引用任何服务,存储库等,上述代码中的@Autowired批注也会停止工作。具体来说,错误是:

Parameter 0 of constructor in com.opt.custom.domain.CustomDomainServiceImpl required a bean of type 'com.opt.repo.RepositoryOne' that could not be found.
Action:
Consider defining a bean of type 'com.opt.repo.RepositoryOne' in your configuration.

我不知道简单地添加依赖项(而不使用依赖项)怎么会导致此问题。

我尝试将@ComponentScan添加到上述类中:

@ComponentScan(basePackages = {"com.opt.repo"})

但这没有帮助。

如果有帮助,这是我作为依赖添加的Maven项目中的顶级类:

package com.opt.new.service;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@SpringBootApplication
@EntityScan(basePackages = { "com.someotherpackage.persistence.*" })
public class PersistenceClasses {

    public static void main(String[] args) {
        SpringApplication.run(PersistenceClasses .class, args);
    }

}

感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:0)

@ComponentScan注释应添加到Spring Boot应用程序类。在您的情况下,其为PersistenceClasses。另外,请确保在您的@Repository类上有一个RepositoryOne批注

@Repository是spring原型,用于标识应用程序中的spring组件。有关更多信息,请参见here