从外部 JAR 初始化 class bean - 构造函数问题

Initialize class bean from external JAR - constructor issue

我正在从外部服务导入 JAR。这是 服务 class 代码:

private final PermissionsRepository permissionsRepository;
@Autowired
public PermissionsServiceImpl(PermissionsRepository permissionsRepository) {
    this.permissionsRepository = permissionsRepository;
}
public Collection<Permission> findAll() {
        System.out.println("inside get all permissions");
        return permissionsRepository.findAll();
}

而存储库是一个常规的 JPA 接口

public interface PermissionsRepository extends JpaRepository<Permission, PermissionTable> {}

我试图在其他程序中使用“findAll”方法,所以我从上面的项目创建了一个 JAR,导入了它,但我很难初始化服务 bean,因为我无法通过存储库作为参数。最好的方法是什么?

这是我目前在 BeanConfig class 中的内容(在导入 JAR 的 其他项目 中):

@Configuration
@EntityScan(basePackageClasses = {PermissionsRepository.class})
public class BeansConfig {
// need to create permissionRepository 
   @Bean
    public PermissionsService permissionsService() {
        return new PermissionsServiceImpl(???);
    }
}

谢谢

已解决。

所需的更改在导入项目中的 服务 class 中。

@Service
@EntityScan(basePackages = {"com.demo.internal.myapp"})
@EnableJpaRepositories("com.demo.internal.myapp.permissions")
@ComponentScan(basePackages = { "com.demo.internal.myapp" })
public class PermissionsServiceImpl implements PermissionsService {

    private PermissionsRepository permissionsRepository;

    @Autowired
    public PermissionsServiceImpl() {

    }

    @Autowired
    public void setPermissionsService(PermissionsRepository permissionsRepository) {
        this.permissionsRepository = permissionsRepository;
    }

    public Collection<Permission> findAll() {
        System.out.println("inside get all permissions");
        return permissionsRepository.findAll();
    }
}

基本上,您需要告诉 spring 在哪里寻找实体模型对象、存储库等。所以我添加了 3 个注释: EntityScan、EnableJpaRepositories 和 ComponentScan 可以做到这一点。

还为存储库变量进行了构造函数依赖注入。