/**
  * 'Native' processing method for direct calls with an arbitrary target instance, resolving all of
  * its fields and methods which are annotated with {@code @Autowired}.
  *
  * @param bean the target instance to process
  * @throws BeansException if autowiring failed
  */
 public void processInjection(Object bean) throws BeansException {
   Class<?> clazz = bean.getClass();
   InjectionMetadata metadata = findAutowiringMetadata(clazz.getName(), clazz);
   try {
     metadata.inject(bean, null, null);
   } catch (Throwable ex) {
     throw new BeanCreationException(
         "Injection of autowired dependencies failed for class [" + clazz + "]", ex);
   }
 }
  @Override
  public PropertyValues postProcessPropertyValues(
      PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)
      throws BeansException {

    InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass());
    try {
      metadata.inject(bean, beanName, pvs);
    } catch (Throwable ex) {
      throw new BeanCreationException(beanName, "Injection of autowired dependencies failed", ex);
    }
    return pvs;
  }