public ContextAccessor<?> getAccessor(Object object) {
   if (object == null) {
     return null;
   } else if (!classAccessors.containsKey(object.getClass())) {
     ContextAccessor<?> mostSpecific = null;
     for (ContextAccessor<?> accessor : accessors) {
       if (accessor.getContextType().isAssignableFrom(object.getClass())) {
         if (mostSpecific == null
             || mostSpecific.getContextType().isAssignableFrom(accessor.getContextType())) {
           mostSpecific = accessor;
         }
       }
     }
     synchronized (classAccessors) {
       classAccessors.put(
           object.getClass(), mostSpecific == null ? new JavaContextAccessor() : mostSpecific);
     }
   }
   return classAccessors.get(object.getClass());
 }