我想我通过创建自定义范围解决了这个问题。下面的文章真的很有帮助:
这是我如何解决它的非常简短的描述。
创建自定义范围注释。
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;
}