カスタムスコープを作成することで解決したと思います。次の記事は本当に役に立ちました。
これは、私がそれをどのように解決したかの非常に簡単な説明です。
カスタム スコープ アノテーションを作成します。
import javax.enterprise.context.NormalScope;
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@NormalScope
public @interface CustomScope {
}
カスタム コンテキストを作成します。
import javax.enterprise.context.spi.Context;
public class CustomContext implements Context {
private MyFw myFw = .... ;
@Override
public Class<? extends Annotation> getScope() {
return CustomScope.class;
}
@Override
public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext) {
Bean bean = (Bean) contextual;
return (T) myFw.get(bean.getBeanClass());
}
@Override
public <T> T get(Contextual<T> contextual) {
Bean bean = (Bean) contextual;
return (T) myFw.get(bean.getBeanClass());
}
@Override
public boolean isActive() {
return true;
}
}
拡張機能を作成し、コンテキストを登録します。
import javax.enterprise.inject.spi.Extension;
public class CustomContextExtension implements Extension {
public void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager manager) {
event.addContext(new CustomContext());
}
}
拡張子を登録します。
CustomContextExtension を META-INF/javax.enterprise.inject.spi.Extension に追加します
フレームワーク オブジェクトに CustomScope を追加します。
@CustomScope
public class FwObject { ... }
必要に応じて @Inject を使用して FwObject を注入します。
public class MyService {
@Inject
FwObject obj;
}