Как язык выражений Spring 3 взаимодействует с заполнителями свойств?

Весна 3 представила новыйязык выражения (SpEL), который можно использовать в определениях бинов. Сам синтаксис довольно хорошо указан.

Что не такПонятно, как, если вообще, SpEL взаимодействует с синтаксисом заполнителя свойства, который уже присутствовал в предыдущих версиях. Есть ли в SpEL поддержка заполнителей свойств или мне нужно объединить синтаксис обоих механизмов и надеяться, что они объединятся?

Позвольте мне привести конкретный пример. Я хочу использовать синтаксис свойства${x.y.z}, но с добавлением "значение по умолчанию" синтаксис в соответствии соператор элвиса обрабатывать случаи, когда${x.y.z} не определено

мы попробовали следующие синтаксисы без успеха:

#{x.y.z?:'defaultValue'}#{${x.y.z}?:'defaultValue'}

Первый дает мне

Поле или свойство 'x' не может быть найден на объекте типа 'org.springframework.beans.factory.config.BeanExpressionContext»

что говорит о том, что SpEL нене признать это в качестве заполнителя свойства.

Второй синтаксис выдает исключение, говорящее, что заполнитель не распознан, поэтому преобразователь заполнителяявляется вызывается, но терпит неудачу, как и ожидалось, так как свойство не определено.

В документах не упоминается об этом взаимодействии, поэтому либо это невозможно, либобез документов.

Кому-нибудь удалось это сделать?

Хорошо яМы придумали небольшой автономный тестовый пример для этого. Это все работает как есть:

Во-первых, определения бина:



 

    

    
        Value A
    

    
            
         

             
         

Затем тривиальный класс бинов:

пакетный тест;

public class Bean {

    String value;

    public void setValue(String value) {
        this.value = value;
    }
}

И, наконец, контрольный пример:

package test;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class PlaceholderTest {

    private @Resource Bean testBean;

    @Test
    public void valueCheck() {
        assertThat(testBean.value, is("Value A"));
    }
}

Задача - найти в файле beans выражение SpEL, которое позволяет мне указать значение по умолчанию в тех случаях, когда${x.y.z} не может быть решена, и это по умолчаниюдолжен быть указанным как часть выражения, а не экстернализованным в другом наборе свойств.

Ответы на вопрос(8)

Ваш ответ на вопрос