Spring 5.x 和 CDI 2.x 集成选项
Spring 5.x and CDI 2.x Integration Options
考虑到 Spring 的 5.x 基线和 CDI 的基线 2.x,我应该考虑哪些更可行的选项将它们集成到 JSF 2.3 项目中,因为 JSF 2.3 是耦合的与 CDI?桥梁?自定义 Bean 工厂?其他人?
我们使用 bean 生产者访问 CDI 中的 Spring 个对象。由于在我们使用的体系结构中,UI 和 server/business 之间有一个接口层,这种集成得到了促进。
整合如下。
来自 view/ui 层的 Cdi 工厂。
public class MainViewClientFactory {
public MainViewClientFactory() {
}
@ApplicationScoped
@Produces
public CadastroPaisService cadastroPaisService() {
return CdiSpringUtils.getSpringBean(CadastroPaisService.class);
}
}
CdiSpringUtils Class.
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 Class。
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;
}
}
考虑到 Spring 的 5.x 基线和 CDI 的基线 2.x,我应该考虑哪些更可行的选项将它们集成到 JSF 2.3 项目中,因为 JSF 2.3 是耦合的与 CDI?桥梁?自定义 Bean 工厂?其他人?
我们使用 bean 生产者访问 CDI 中的 Spring 个对象。由于在我们使用的体系结构中,UI 和 server/business 之间有一个接口层,这种集成得到了促进。 整合如下。
来自 view/ui 层的 Cdi 工厂。
public class MainViewClientFactory {
public MainViewClientFactory() {
}
@ApplicationScoped
@Produces
public CadastroPaisService cadastroPaisService() {
return CdiSpringUtils.getSpringBean(CadastroPaisService.class);
}
}
CdiSpringUtils Class.
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 Class。
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;
}
}