我遇到一个令人困惑的@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);
}
}
感谢您提供的任何见解。
答案 0 :(得分:0)
@ComponentScan
注释应添加到Spring Boot应用程序类。在您的情况下,其为PersistenceClasses
。另外,请确保在您的@Repository
类上有一个RepositoryOne
批注
@Repository是spring原型,用于标识应用程序中的spring组件。有关更多信息,请参见here