我可以从枚举访问弹簧组件吗?

发布于 2025-02-11 20:42:33 字数 1263 浏览 0 评论 0原文

我已经完成了从数据库记录创建捆绑包的课程。 记录是从存储过程中获得的,此过程的名称取自ServiceConfig实例,即Spring @configuration。

现在,我使用Java Map使用ServiceConfig方法将每个DB实体类绑定。 我想在此处扩展它并使用枚举而不是procnamesupplier。是否可以从Enum访问ServiceConfig?

@Component
public class BundleMaker {
    @PersistenceContext
    private final EntityManager entityManager;
    private final Map<Class<? extends IRecord>, Supplier<String>> procNameSupplier = new HashMap<>();

    public BundleMaker(EntityManager entityManager, ServiceConfig config) {
        this.entityManager = entityManager;

        procNameSupplier.put(MainDepRecord.class, config::mainDepProc);
        //...
    }

    public <T extends IRecord> Bundle bundle(Class<T> cl) {
        StoredProcedureQuery query;
        query = entityManager.createStoredProcedureQuery(procNameSupplier.get(cl).get(), cl)
                             .registerStoredProcedureParameter(1, cl, REF_CURSOR);
        List<T> resultList = query.getResultList();
        List<Resource> resources = resultList.stream()
                                             .map(T::toResource)
                                             .collect(Collectors.toList());
        return new Bundle(resources);
    }
}

I have made this class which creates bundle from database records.
The records are got from stored procedures and names of this procedures are taken from ServiceConfig instance which is Spring @Configuration.

Now I use java Map to bind each DB entity class with according ServiceConfig method.
I would like to extend it and use Enum instead of procNameSupplier here. Is it possible to access ServiceConfig from enum?

@Component
public class BundleMaker {
    @PersistenceContext
    private final EntityManager entityManager;
    private final Map<Class<? extends IRecord>, Supplier<String>> procNameSupplier = new HashMap<>();

    public BundleMaker(EntityManager entityManager, ServiceConfig config) {
        this.entityManager = entityManager;

        procNameSupplier.put(MainDepRecord.class, config::mainDepProc);
        //...
    }

    public <T extends IRecord> Bundle bundle(Class<T> cl) {
        StoredProcedureQuery query;
        query = entityManager.createStoredProcedureQuery(procNameSupplier.get(cl).get(), cl)
                             .registerStoredProcedureParameter(1, cl, REF_CURSOR);
        List<T> resultList = query.getResultList();
        List<Resource> resources = resultList.stream()
                                             .map(T::toResource)
                                             .collect(Collectors.toList());
        return new Bundle(resources);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文