[英]How to Inject produces again
使用 javaee bean,是否有可能再次注入属性,例如 null?
我的简化代码:
服务向另一个服务发出 rest 请求,并从PropertyProduces获取主机属性,该属性从第三个配置服务获取。 例如,当我第一次制作RestService.call()时,配置服务被禁用,所以它返回 host=null。 我无法正确调用AnotherService ,这很好。 然后启用了配置服务,但是当我创建第二个RestService.call()时,主机已经是 null 它甚至不想访问PropertyProduces.produceString
我可以以某种方式拦截主机属性的使用,检查它是否是 null 并强制它再次从 Produces 注入?
@ApplicationScoped
public class Service {
@Property
private final String host;
public void callAnotherService() {
callRestMethod(host)
}
}
@ApplicationScoped
public class PropertyProduces {
@Inject
private Config config;
@Property
@Produces
public String produceString(InjectionPoint ip) {
return this.config.getString(ip.getMember().getName());
}
}
@Path("/")
@ApplicationScoped
public class RestService {
@Inject
private Service service;
@POST
@Path("/call")
public Response call(Request request)
{
this.service.callAnotherService();
}
}
我知道我可以将 class服务更改为 @RequestScoped,因此在不同的 rest 请求将创建不同的服务实例,并且每次都会生成主机。 但是否还有另一种可能性,以某种方式改变 PropertyProduces 或制作拦截器?
您应该尝试在您的服务 class 上使用动态 bean 选择:
@Inject
@Property
Instance<String> instance;
然后在您的 Service 方法中,您可以执行以下操作:
public void callAnotherService() {
String host = instance.get();
callRestMethod(host)
}
更多参考https://docs.oracle.com/javaee/7/api/javax/enterprise/inject/Instance.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.