我想在spring中实现类似于JobDetailBean的东西
可以将属性映射应用于对象以设置其字段。
我查看了弹簧源代码,但看不到他们是如何做到的。
有人对如何做到这一点有任何想法吗?
答案 0 :(得分:1)
您可以使用Spring的DataBinder
。
答案 1 :(得分:1)
这是一个没有任何Spring Dependencies的方法。您将bean对象和属性名称Map提供给属性值。它使用JavaBeans introspector机制,因此它应该接近Sun标准:
public static void assignProperties(
final Object bean,
final Map<String, Object> properties
){
try{
final BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
for(final PropertyDescriptor descriptor : beanInfo.getPropertyDescriptors()){
final String propName = descriptor.getName();
if(properties.containsKey(propName)){
descriptor.getWriteMethod().invoke(
bean,
properties.get(propName)
);
}
}
} catch(final IntrospectionException e){
// Bean introspection failed
throw new IllegalStateException(e);
} catch(final IllegalArgumentException e){
// bad method parameters
throw new IllegalStateException(e);
} catch(final IllegalAccessException e){
// method not accessible
throw new IllegalStateException(e);
} catch(final InvocationTargetException e){
// method throws an exception
throw new IllegalStateException(e);
}
}
<强>参考:强>
答案 2 :(得分:0)
几乎可以肯定,这是使用反射API的元素完成的。 Bean具有可通过表单
的功能设置的字段"set"+FieldName
字段的第一个字母大写。
这是另一个按字符串名称调用方法的SO帖子:How do I invoke a Java method when given the method name as a string?