【问题标题】:Initialize class bean from external JAR - constructor issue从外部 JAR 初始化类 bean - 构造函数问题
【发布时间】:2020-07-22 15:20:31
【问题描述】:

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

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 类中的内容(在导入 JAR 的 其他项目 中):

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

谢谢

【问题讨论】:

  • 您可能希望将您的存储库注释为存储库并相应地对其进行扫描。 EntityScan 扫描实体,也不扫描存储库。
  • 我认为它不会解决我的问题,因为我需要做的是弄清楚如何在导入项目上创建一个存储库实例(JPA 接口)。一旦我能够做到这一点,一切都会正常。
  • Spring Boot 数据 jpa 存储库的全部内容是 Spring Boot 根据它们的注解自动实例化它们,并且可以通过 @Autowired 获取。请阅读有关 Minimal, Complete, and Verifiable Examples 的信息并查看 spring 数据文档。

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


【解决方案1】:

解决了。

所需的更改位于导入项目的 service 类中。

@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 就是这样做的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2013-05-23
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多