在Sling/OSGi中,你可以使用ThreadLocal类来跨请求共享数据,从而在同一请求上下文中访问同一实例的对象。
以下是一个简单的示例:
public class ExampleFilter implements Filter {
private static final ThreadLocal<ExampleObject> EXAMPLE_OBJECT_THREAD_LOCAL = new ThreadLocal<>();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ExampleObject exampleObject = new ExampleObject();
EXAMPLE_OBJECT_THREAD_LOCAL.set(exampleObject);
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
// cleanup
EXAMPLE_OBJECT_THREAD_LOCAL.remove();
}
}
public class ExampleService {
private final ExampleObject exampleObject;
public ExampleService() {
this.exampleObject = EXAMPLE_OBJECT_THREAD_LOCAL.get();
}
public void doSomething() {
// use exampleObject
}
}
在这个例子中,ExampleFilter设置ThreadLocal变量EXAMPLE_OBJECT_THREAD_LOCAL的值为ExampleObject对象。在ExampleService中,通过get()方法获取相同的ExampleObject对象。
需要注意的是,在使用完ThreadLocal变量时,需要调用remove()方法来清理该变量。