托管bean定制ViewScope(Managed beans with custom ViewSc

2019-09-17 17:57发布

我在做使用Spring 3.1.0.RELEASE,JSF 2.x中,JPA 2与Hibernate提供的Web应用程序。 我使用友好的URL PrettyFaces 3.3.2。 在Tomcat 6.35运行应用程序。

我想用JSF ViewScope所以我决定追随在网络上找到的实现: http://comdynamics.net/blog/109/spring3-jsf2-view-scope/

public class ViewScope implements Scope {

    private static final Logger logger = LoggerFactory.getLogger(ViewScope.class);

    @Override
    public Object get(String name, ObjectFactory objectFactory) {
        final Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();

        Object instance = viewMap.get(name);
        if (instance == null) {
            instance = objectFactory.getObject();
            viewMap.put(name, instance);
        }
        return instance;
    }

    @Override
    public Object remove(String name) {
        logger.debug("ViewScope::remove {}", name);
        return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
    }

    @Override
    public String getConversationId() {
        return null;
    }

    @Override
    public void registerDestructionCallback(String name, Runnable callback) {
        //Not supported
    }

    @Override
    public Object resolveContextualObject(String key) {
        return null;
    }
}

我注意到, @PreDestroy不叫上他们喜欢表演这个问题@PreDestroy从不叫上@ViewScoped 。

这是否意味着托管豆ViewScope永远不会破坏? 其行为对内存泄漏。 我们应该利用这个范围呢?

这只是自定义Viewscope发生在春季或也钻嘴鱼科?

谢谢。

Answer 1:

问题是视图范围的不正确implementaiton。 它创建的Spring bean objectFactory.getObject(); 但从来没有摧毁它。

为了解决这个问题-检查正确实施与支持registerDestructionCallback

BWT,目前Mojjara实现不会调用@PreDestory您豆得 。 但它至少会释放bean实例。



Answer 2:

我尝试了变通使用弹簧自定义视图范围JSF视图范围bean的内存泄漏。 它同时适用于JSF 2.1&2.2.Try在下面链接的代码。 内存泄漏与ViewScoped豆?



文章来源: Managed beans with custom ViewScope