private static Map<Class,Method[]> getDeclaredMethodBeansMap() { ClassLoader cl = ClassUtils.getContextClassLoader(); Map<Class,Method[]> metadata = (Map<Class,Method[]>) declaredMethodBeans.get(cl); if (metadata == null) { // Ensure thread-safe put over _metadata, and only create one map // per classloader to hold metadata. synchronized (declaredMethodBeans) { metadata = createDeclaredMethodBeansMap(cl, metadata); } } return metadata; }
Method[] getDeclaredMethods(Class clazz) { Map<Class,Method[]> declaredMethodBeansMap = getDeclaredMethodBeansMap(); Method[] methods = declaredMethodBeansMap.get(clazz); if (methods == null) { methods = clazz.getDeclaredMethods(); synchronized(declaredMethodBeansMap) { declaredMethodBeansMap.put(clazz, methods); } } return methods; }
Method[] methods = getDeclaredMethods(clazz); if (methods == null) Map<Class,Method[]> declaredMethodBeansMap = getDeclaredMethodBeansMap(); synchronized(declaredMethodBeansMap) invokeAnnotatedMethod(postConstruct, instance);
Method[] methods = getDeclaredMethods(clazz); Method preDestroy = null; for (int i = 0; i < methods.length; i++) invokeAnnotatedMethod(preDestroy, instance);
@Override public Object inject(Object instance) throws InjectionProviderException { try { processAnnotations(instance); } catch (IllegalAccessException ex) { throw new InjectionProviderException(ex); } catch (InvocationTargetException ex) { throw new InjectionProviderException(ex); } catch (NamingException ex) { throw new InjectionProviderException(ex); } return null; }