将 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);
.
.
这很好用。问题已解决。
我目前有一个方法可以执行以下操作:
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);
.
.
这很好用。问题已解决。