我需要注入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做我想做的事情? 或者我是否需要自己实施机制(使用地图或类似机制)?
环境不会是开发,测试,升级,刺激或类似的。多个环境可能共存。