考虑到Spring的5.x基线和CDI的基线2.x,我应该考虑哪些更可行的选项来将它们集成到JSF2.3中,因为JSF2.3与CDI是耦合的。桥梁?定制豆厂?其他?
发布于 2022-02-05 23:32:20
我们使用bean生产者来访问CDI中的Spring对象。在我们使用的体系结构中,UI和服务器/业务之间有一个接口层,这种集成非常方便。集成按以下方式执行。
来自视图/ui层的Cdi工厂。
public class MainViewClientFactory {
public MainViewClientFactory() {
}
@ApplicationScoped
@Produces
public CadastroPaisService cadastroPaisService() {
return CdiSpringUtils.getSpringBean(CadastroPaisService.class);
}
}CdiSpringUtils级。
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级。
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;
}
}https://stackoverflow.com/questions/63174862
复制相似问题