Java 如何在CDI中将@Disposes与字符串对象一起使用
我为@RequestParameter创建了Producer,代码如下:Java 如何在CDI中将@Disposes与字符串对象一起使用,java,cdi,Java,Cdi,我为@RequestParameter创建了Producer,代码如下: @Produces @RequestParameter public String getStringParameter(InjectionPoint injectionPoint){ String name = injectionPoint.getAnnotated().getAnnotation(RequestParameter.class).value(); if("".equals(name)){
@Produces
@RequestParameter
public String getStringParameter(InjectionPoint injectionPoint){
String name = injectionPoint.getAnnotated().getAnnotation(RequestParameter.class).value();
if("".equals(name)){
name = injectionPoint.getMember().getName();
}
FacesContext facesContext = FacesContext.getCurrentInstance();
if(facesContext == null){
return "";
}
return facesContext.getExternalContext().getRequestParameterMap().get(name);
}
Usage:
@ConversationScope
class bean{
@Inject
@RequestParameter("ParamX")
private String paramX;
}
我希望在处理请求后,变量paramX将变为null。但我不能将@Disposes用作以下代码,在Glassfish中部署ear文件时会出现异常
public void close(@Disposes String value) {
value=null;
}
我该如何应对这种情况?谢谢你的提示。我不知道你想做什么。如果您将字符串放入请求范围,它将在请求结束时自动释放。处置器用于释放垃圾收集器不会自动释放的资源(如消息队列上打开的文件或侦听器)。它不是销毁实例的钩子:容器将完成此操作。 在这里,出现异常是很正常的,您试图完成容器的工作 disposer方法允许应用程序对生产者方法返回的对象执行自定义清理 例如,对于需要正确清理的文件或数据库连接,可能需要这样做 在您的情况下,您的producer方法可能会在您的bean中使用它自己的作用域调用。因此,当bean被销毁时,字符串将被销毁。您不必自己做这件事 请记住,您可以通过定义注释来限定生成器,以防止与其他生成器方法的干扰。然后,仅当限定符注释出现在注入点和生成器方法时,才会调用生成器