@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return wrapper(bean);
	}
@Test
	public void testPostProcessBeforeInitialization() {
		BeanFactory beanFactory = mock(BeanFactory.class);
		doAnswer(invocation -> {
			Class<?> clazz = invocation.getArgument(0);
			if (clazz.equals(BlockingLoadBalancerClient.class)) {
				return mock(BlockingLoadBalancerClient.class);
			}
			if (clazz.equals(LoadBalancerProperties.class)) {
				return mock(LoadBalancerProperties.class);
			}
			if (clazz.equals(LoadBalancerClientFactory.class)) {
				return mock(LoadBalancerClientFactory.class);
			}
			return null;
		}).when(beanFactory).getBean(any(Class.class));
		ObjectProvider objectProvider = mock(ObjectProvider.class);
		doReturn(new PolarisLoadBalancerFeignRequestTransformer()).when(objectProvider).getObject();
		doReturn(objectProvider).when(beanFactory).getBeanProvider(LoadBalancerFeignRequestTransformer.class);
		enhancedFeignBeanPostProcessor.setBeanFactory(beanFactory);

		// isNeedWrap(bean) == false
		Object bean1 = new Object();
		Object bean = enhancedFeignBeanPostProcessor.postProcessBeforeInitialization(bean1, "bean1");
		assertThat(bean).isNotInstanceOfAny(EnhancedFeignClient.class);

		// bean instanceOf Client.class
		Client bean2 = mock(Client.class);
		bean = enhancedFeignBeanPostProcessor.postProcessBeforeInitialization(bean2, "bean2");
		assertThat(bean).isInstanceOf(EnhancedFeignClient.class);

		// bean instanceOf FeignBlockingLoadBalancerClient.class
		FeignBlockingLoadBalancerClient bean4 = mock(FeignBlockingLoadBalancerClient.class);
		doReturn(mock(Client.class)).when(bean4).getDelegate();
		bean = enhancedFeignBeanPostProcessor.postProcessBeforeInitialization(bean4, "bean4");
		assertThat(bean).isInstanceOf(FeignBlockingLoadBalancerClient.class);
		assertThat(((FeignBlockingLoadBalancerClient) bean).getDelegate()).isInstanceOf(EnhancedFeignClient.class);
	}