private <T> boolean circularInjectAnnotatedSetters(Object bean,
			Class<T> typeForCircularAutowiring, Object beanForCirularAutowiring) {
		Method[] methods =  beanForCirularAutowiring.getClass().getDeclaredMethods();
		boolean methodFound = false;
		for(Method method : methods){
			if(method.isAnnotationPresent(CircularAutowired.class)){
				Class<?>[] types = method.getParameterTypes();
				switch (types.length) {
				case 0:
					throw new FatalBeanException(
							"at least one parameter is required for method "
									+ method.getName()
									+ " annotated as @"+CircularAutowired.class.getSimpleName()
									+ " in class " + typeForCircularAutowiring.getName());
				case 1:
					Class<?> paramType = types[0];
					if(isInstanceOfType(paramType, bean)){
						methodFound = true;
						ReflectionUtils.makeAccessible(method);
						ReflectionUtils.invokeMethod(method, beanForCirularAutowiring, bean);
					}
					
					break;
				default:
					throw new FatalBeanException(
							"setter method "+method.getName()
									+"  annotated as @"+ CircularAutowired.class.getSimpleName()
									+ " in class " + bean.getClass()
									+ " requires "+types.length + " parameters "
									+ " but should require only one parameter. ");
				}
			}
		}
		return methodFound;
	}