我最近遇到过一段代码:
for(int i=0;i<10000;i++) {
....
PageManager manager = resourceResolver.adaptTo(PageManager.class);
....
}
是否意味着将创建10000个PageManager对象,或者每次都获得相同的对象?
由于
答案 0 :(得分:1)
查看Adaptable文档,希望它能回答您的问题
它显式保留为实现细节,是否每次调用具有相同类型的此方法都会在每次调用时生成相同的对象或新对象。
类似问题purpose-of-resourceresolver-adapttosession
只需简单解释
SlingHttpServletRequest.getResourceResolver()
方法用于请求处理servlet。还可以通过ResourceResolverFactory
创建资源解析程序。因此,当您通过ResourceResolver获取资源并且适应其他类型或对象的某些表示时,该对象将是相同的。请记住,您在资源上执行的操作(在adaptTO()
之后)应该小心,因为资源通常不是线程安全的。更新解析程序的示例,以使用refresh()
方法等来反映最新状态
答案 1 :(得分:0)
确定。
我在API中找不到具体的实现,但我编写了这个示例代码来测试:
ResourceResolver res = request.getResourceResolver();
PageManager temp = res.adaptTo(PageManager.class);
for (int i=0; i < 100; i++) {
PageManager mgr = res.adaptTo(PageManager.class);
out.println("For iteration: " + i + " The object is: " + mgr.hashCode());
if (temp == mgr) {
out.println("For iteration: " + i + " the objects are equal");
}
temp = mgr;
}
我每次都得到相同的哈希码,并且与==相比,两个引用返回true;因此证明他们指的是同一个对象。