Khi sử dụng Spring, bạn có thể đặt thuộc tính chỉ khi giá trị được chuyển không phải là null không?Mùa xuân - chỉ đặt thuộc tính nếu giá trị không rỗng là
Ví dụ:
<bean name="myBean" class="some.Type">
<property name="abc" value="${some.param}"/>
</bean>
Các hành vi Tôi đang tìm kiếm là:
some.Type myBean = new some.Type();
if (${some.param} != null) myBean.setAbc(${some.param});
Lý do tôi cần điều này là kể từ abc
có một giá trị mặc định mà tôi không muốn ghi đè lên với a null
. Và Bean tôi đang tạo không thuộc quyền kiểm soát nguồn của tôi - vì vậy tôi không thể thay đổi hành vi của nó. (Ngoài ra, abc
cho mục đích này có thể là một nguyên thủy, vì vậy tôi không thể thiết lập nó với một null nào
EDIT:.
Theo câu trả lời Tôi nghĩ rằng câu hỏi của tôi đòi hỏi phải làm rõ
tôi. có đậu Tôi cần phải nhanh chóng và vượt qua cho bên thứ 3. Tôi sử dụng bean này có nhiều thuộc tính (12 hiện) các loại khác nhau (int
, boolean
, String
, v.v.)
Mỗi thuộc tính có giá trị mặc định - Tôi không biết nó là gì và không muốn biết trừ khi nó trở thành một vấn đề. 210 Những gì tôi đang tìm kiếm là một giải pháp chung đến từ khả năng của Spring - hiện tại giải pháp duy nhất tôi có là một sự phản chiếu dựa trên.
Cấu hình
<bean id="myBean" class="some.TypeWrapper">
<property name="properties">
<map>
<entry key="abc" value="${some.value}"/>
<entry key="xyz" value="${some.other.value}"/>
...
</map>
</property>
</bean>
Mã
public class TypeWrapper
{
private Type innerBean;
public TypeWrapper()
{
this.innerBean = new Type();
}
public void setProperties(Map<String,String> properties)
{
if (properties != null)
{
for (Entry<String, Object> entry : properties.entrySet())
{
String propertyName = entry.getKey();
Object propertyValue = entry.getValue();
setValue(propertyName, propertyValue);
}
}
}
private void setValue(String propertyName, Object propertyValue)
{
if (propertyValue != null)
{
Method method = getSetter(propertyName);
Object value = convertToValue(propertyValue, method.getParameterTypes()[0]);
method.invoke(innerBean, value);
}
}
private Method getSetter(String propertyName)
{
// Assume a valid bean, add a "set" at the beginning and toUpper the 1st character.
// Scan the list of methods for a method with the same name, assume it is a "valid setter" (i.e. single argument)
...
}
private Object convertToValue(String valueAsString, Class type)
{
// Check the type for all supported types and convert accordingly
if (type.equals(Integer.TYPE))
{
...
}
else if (type.equals(Integer.TYPE))
{
...
}
...
}
}
Các sản "khó khăn" là trong việc thực hiện convertToValue
cho tất cả các loại giá trị càng tốt. Tôi đã làm điều này nhiều lần trong đời - vì vậy nó không phải là một vấn đề lớn để thực hiện nó cho tất cả các loại có thể mà tôi cần (chủ yếu là nguyên thủy và một vài enums) - nhưng tôi hy vọng một giải pháp thông minh hơn đã tồn tại.
Thanks for the tip - điều này có thể hữu ích trong tương lai, nhưng trong trường hợp của tôi, tôi không thể sử dụng nó - như tôi đã nói, đậu này không nằm trong kiểm soát nguồn của tôi - vì vậy tôi không biết mặc định của nó là gì (và không muốn biết). Tôi đã hy vọng cho một cái gì đó các dòng: '' –
RonK