首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring5.x和CDI2.x集成选项

Spring5.x和CDI2.x集成选项
EN

Stack Overflow用户
提问于 2020-07-30 14:02:37
回答 1查看 823关注 0票数 1

考虑到Spring的5.x基线和CDI的基线2.x,我应该考虑哪些更可行的选项来将它们集成到JSF2.3中,因为JSF2.3与CDI是耦合的。桥梁?定制豆厂?其他?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-05 23:32:20

我们使用bean生产者来访问CDI中的Spring对象。在我们使用的体系结构中,UI和服务器/业务之间有一个接口层,这种集成非常方便。集成按以下方式执行。

来自视图/ui层的Cdi工厂。

代码语言:javascript
复制
public class MainViewClientFactory {

    public MainViewClientFactory() {
    }

    @ApplicationScoped
    @Produces
    public CadastroPaisService cadastroPaisService() {
        return CdiSpringUtils.getSpringBean(CadastroPaisService.class);
    }

}

CdiSpringUtils级。

代码语言:javascript
复制
public class CdiSpringUtils {

    private CdiSpringUtils() {
    }

    public static <R, Q extends Annotation> R getSpringBean(Class<R> beanClass) {
        return ApplicationContextProvider.getApplicationContext().getBean(beanClass);
    }

    public static <R, Q extends Annotation> R getSpringBean(Class<R> beanClass, Class<Q> qualifierClass) {
        return ApplicationContextProvider.getQualifiedBeanOfType(beanClass, qualifierClass);
    }

}

ApplicationContextProvider级。

代码语言:javascript
复制
public class ApplicationContextProvider implements ApplicationContextAware {

    private static ApplicationContext context;

    public static ApplicationContext getApplicationContext() {
        return context;
    }

    public static <R, Q extends Annotation> R getQualifiedBeanOfType(Class<R> cls, Class<Q> qualifierAnnotationClass) {
        R bean = null;
        Map<String, R> beanMap = getApplicationContext().getBeansOfType(cls);
        for (Map.Entry<String, R> entry : beanMap.entrySet()) {
            Q targetAnnotation = getApplicationContext().findAnnotationOnBean(entry.getKey(), qualifierAnnotationClass);
            if (targetAnnotation != null) {
                bean = entry.getValue();
                break;
            }
        }
        return bean;
    }

    @Override
    public void setApplicationContext(ApplicationContext ctx) {
        context = ctx;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63174862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档