Method[] methods = beanClass.getMethods();
Collection<Method> methods = ReflectUtil.getMethods(beanClass);
	protected FilterMethods getFilterMethods(Class<? extends ActionBean> beanClass) {		FilterMethods filterMethods = filterMethodsCache.get(beanClass);		if (filterMethods == null) {			filterMethods = new FilterMethods();			filterMethodsCache.put(beanClass, filterMethods);					// Look for @Before and @After annotations on the methods in the ActionBean class			Method[] methods = beanClass.getMethods();            for (Method method : methods) {                int mods = method.getModifiers();                if (method.isAnnotationPresent(Before.class)) {                    if (method.getParameterTypes().length == 0 && !Modifier.isAbstract(mods)) {                        Before annotation = method.getAnnotation(Before.class);                        filterMethods.addBeforeMethod(annotation.value(), method);                    }                    else {                        log.warn("Method '", beanClass.getName(), ".", method.getName(), "' is ",                                 "annotated with @Before but has an incompatible signature. ",                                 "@Before methods must be non-abstract zero-argument methods.");                    }                }                if (method.isAnnotationPresent(After.class)) {                    if (method.getParameterTypes().length == 0 && !Modifier.isAbstract(mods)) {                        After annotation = method.getAnnotation(After.class);                        filterMethods.addAfterMethod(annotation.value(), method);                    }                    else {                        log.warn("Method '", beanClass.getName(), ".", method.getName(), "' is ",                                 "annotated with @After but has an incompatible signature. ",                                 "@After methods must be non-abstract zero-argument methods.");                    }                }            }		}		return filterMethods;	}