SpringBoot:无法从其他Jar库中自动布线类

我正在开发一个SpringBoot应用程序(例如MyApp),该应用程序依赖于两个具有不同实现的数据项目:

data-jdbc.jar

  • 使用它公开 JDBCDataService 类构建,该类将由我的应用程序使用spring-boot-starter-jdbc

示例代码:

@Service 
public class JDBCDataServiceImpl implements JDBCDataService {

@Autowired
private JDBCDataRepository jdbcDataRepository;    
... 
}
  • 带包装my.data.jdbc
  • 没有SpringBoot主类。仅为单元测试类创建的弹簧配置
  • 存储库类正在使用JDBCTemplate

示例存储库:

@Repository
public class JDBCDataRepositoryImpl implements JDBCDataRepository {

@Autowired
protected JdbcTemplate jdbcTemplate;
...
}

data-jpa.jar

  • 使用也公开了 JPADataService 类构建,该类也将由我的应用程序使用spring-boot-starter-data-jpa

示例代码:

@Service 
public class JPADataServiceImpl implements JPADataService {

@Autowired
private JPADataRepository jpaDataRepository;    
... 
}
  • 带包装my.data.jpa
  • 没有SpringBoot主类。仅为单元测试类创建的弹簧配置
  • 存储库类扩展了接口CrudRepository

示例存储库:

@Repository
public interface JPADataRepository extends CrudRepository<MyObject, Integer{
...
}

在我的SpringBoot项目中,我有以下SpringBoot主要应用程序:

@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
}

在我的商务服务班上,我有以下注射MainService

@Service
public class MainServiceImpl implements MainService {

@Autowired
private JDBCDataService jdbcDataService;

@Autowired
private JPADataService jpaDataService;

但是,我遇到了一个问题,这个问题只存在于班级中,但对班级来说却很好。"Could not Autowire. No beans of 'JPADataService' type found"JPADataServiceJDBCService

我已经尝试了以下问题中找到的解决方案,但在我的情况下,这些解决方案都不起作用:

我不能@Autowire依赖库 Jar 中存在的 Bean 吗?

@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})

如何@Autowire由外部罐子制成的弹簧豆?

@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}

我现在已经找到了解决问题的方法。我必须将主 MyApp.java一个更高的包级别才能扫描我的数据库。

我必须不把我的包放在下面,而是把它移到下面,以便成功地扫描我的库和包。MyApp.javamy.appmymy.data.jpamy.data.jdbc


答案 1

我现在已经找到了解决问题的方法。我必须将主 MyApp.java一个更高的包级别才能扫描我的数据库。

我必须不把我的包放在下面,而是把它移到下面,以便成功地扫描我的库和包。MyApp.javamy.appmymy.data.jpamy.data.jdbc


答案 2

如果您尝试使用 Autowire 的类未使用 注释,则添加将不起作用。为了实现这一点,您必须在类中注释一个方法。像这样的东西应该允许你自动连接类:@ComponentScan@Component@Configuration

@Configuration
public class ConfigClass{

    @Bean
    public JPADataService jpaDataService(){
        return new JPADataService();
    }
}

推荐