将 BeanUtils 方法创建为 Java Bean 的问题

Issue creating BeanUtils Method as Java Bean

我目前有一个方法可以执行以下操作:

public void updateField(String user, String field, Date value) {
   PropertyUtils.addBeanIntrospector( new FluidPropertyBeanIntrospector());

   MyClass myclass = getMyClass(user);
   
   BeanUtils.copyProperty(myClass, field, value);
}

这很好用,但我希望 copyProperty() 方法是一个 bean,这样每次调用该方法时都不会调用 bean 内省器。

我试过这个:

@Configuration
public class BeanUtilsConfig() {

   @Bean
   public void updateProperty(Myclass myclass, String field, Date Value) {
   
     PropertyUtils.addBeanIntrospector(new FluentPropertyBeanIntrospector());  

     BeanUtils.copyProperty(singleMetadataDocumentDto, field, value);
  }

}

,启动时出现如下错误:

描述:

dl.datalake.metadata.config.BeanUtilsConfiguration 中方法 updateProperty 的参数 1 需要找不到类型 'java.lang.String' 的 bean。

操作:

考虑在您的配置中定义类型为 'java.lang.String' 的 bean。

我想我在定义 bean 时基本上做错了。如果有任何帮助,我将不胜感激。谢谢

我重构了设置,现在可以正常工作了。部分问题在于所有 BeanUtils 方法都是静态的,因此任何 bean 实现都必须适应这一点。

我重构如下:

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.FluentPropertyBeanIntrospector;
import org.apache.commons.beanutils.PropertyUtils;

import java.lang.reflect.InvocationTargetException;

public class MyBeanUtils extends BeanUtils {

    public MyBeanUtils() {
        super();
    }

    public static void copyProperty(Object obj1, String string, Object obj2) throws InvocationTargetException, IllegalAccessException {
        PropertyUtils.addBeanIntrospector(new FluentPropertyBeanIntrospector());
        BeanUtils.copyProperty(obj1, string, obj2);
    }
}

,然后豆子class:

import mypath.MyBeanUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanUtilsConfiguration {

    @Bean(name = "myBeanUtils")
    public MyBeanUtils beanUtils() {
        return new MyBeanUtils();
    }
}

,然后简单地调用 class:

.
.

@Autowired
private MyBeanUtils myBeanUtils;

.
.

dlmyBeanUtils.copyProperty(objectToUpdate, field, value);

.
.

这很好用。问题已解决。