如何在Spring XML中表示含参数处理逻辑的Person类?
在Spring XML中配置带参数处理逻辑的Person类
嘿,这个问题我太熟了!咱们分情况来唠唠怎么配置,完全贴合你的需求~
首先先明确场景:假设你的Person类已经写好了带参数处理逻辑的setter方法,比如像这样(举个实际例子):
public class Person { private String fullName; // 自定义setter:先去除前后空格,再转成大写后赋值 public void setFullName(String fullName) { if (fullName == null) { this.fullName = null; return; } this.fullName = fullName.trim().toUpperCase(); } public String getFullName() { return fullName; } }
接下来根据你的实际需求,有三种常用的Spring XML配置方式:
1. 最直接:直接调用自定义setter
如果你的setter方法已经自带了参数处理逻辑,那配置起来超级简单——Spring默认会自动调用对应的setter方法,你只需要正常配置<bean>和<property>就行:
<!-- 直接配置Person Bean,Spring会自动调用带处理逻辑的setFullName方法 --> <bean id="myPerson" class="com.yourpackage.Person"> <!-- 传入的带空格的字符串会被setter自动处理 --> <property name="fullName" value=" sarah connor "/> </bean>
这种情况下,Spring会把" sarah connor "传给setFullName方法,你的处理逻辑会自动执行,最终fullName属性的值会是"SARAH CONNOR"。
2. 全局统一处理:用自定义PropertyEditor
如果你希望所有String类型的属性都自动执行同样的处理逻辑(不止Person类),那可以自定义一个PropertyEditor,然后在Spring中全局注册:
第一步:写自定义PropertyEditor
import java.beans.PropertyEditorSupport; public class ProcessedStringEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null) { setValue(null); } else { // 这里写你统一的字符串处理逻辑:trim+转大写 setValue(text.trim().toUpperCase()); } } }
第二步:在Spring XML中注册这个编辑器
<!-- 全局注册自定义字符串编辑器 --> <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <!-- 指定对java.lang.String类型的属性使用我们的编辑器 --> <entry key="java.lang.String" value="com.yourpackage.ProcessedStringEditor"/> </map> </property> </bean> <!-- 配置Person Bean,此时所有String属性都会被自动处理 --> <bean id="myPerson" class="com.yourpackage.Person"> <property name="fullName" value=" john doe "/> </bean>
这样配置后,不管哪个Bean的String类型属性,只要通过Spring XML赋值,都会经过你定义的处理逻辑。
3. 灵活配置:用Spring SpEL表达式
如果你不想修改setter,也不想全局处理,只想在配置这个Person Bean的时候临时处理参数,那可以用Spring的表达式语言(SpEL)直接在<property>里处理字符串:
<bean id="myPerson" class="com.yourpackage.Person"> <!-- 用SpEL直接在配置时处理字符串:trim+转大写 --> <property name="fullName" value="#{' kyle reese '.trim().toUpperCase()}"/> </bean>
SpEL会先执行trim()和toUpperCase()方法,把处理后的结果传给setFullName方法,同样能达到你要的效果。
内容的提问来源于stack exchange,提问作者Sajin Mathew
相关产品推荐
相关产品推荐

