CDI - 依赖&应用程序范围

时间:2017-10-05 08:50:34

标签: java scope cdi

场合

我需要注入SessionFactory

挑战在于工厂在不同的环境中是不同的 每个环境的工厂应为@ApplicationScoped

由于事先不知道哪些环境存在,我使用@Nonbinding属性创建了一个限定符:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Environment {

  /**
   * Environment identifier
   */
  @Nonbinding String value() default "";

}

还有制片人:

@Produces
@Dependent
@Environment
public SqlSessionFactory produceEnvironmentFactory(InjectionPoint ip)
  throws Exception {
  Environment environment = ip.getAnnotated().getAnnotation(Environment.class);
  return produceFactory(environment.value());
}

问题

由于我需要使用注入点来确定要生产的工厂,我无法使用@ApplicationScoped注释。

有没有一种简单的方法可以使用CDI做我想做的事情? 或者我是否需要自己实施机制(使用地图或类似机制)?

编辑:

环境不会是开发,测试,升级,刺激或类似的。多个环境可能共存。

0 个答案:

没有答案