Spel @Value устанавливает ноль - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь изучить SpEl и установить значения полей объекта из свойств.Но в результате поля объекта становятся пустыми.Вот мой код

Класс конфигурации:

@Configuration
@ComponentScan(basePackageClasses = ExpressiveConfig.class)
@PropertySource("classpath:
/fourthversion/chapter3.placeholders/app.properties")

public class ExpressiveConfig {

@Bean
public
static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}
}

Класс, в котором я пытаюсь установить значения полей:

@Component
public class BlankDisc implements CompactDisc {

private String title;
private String artist;

public BlankDisc(@Value("#{systemProperties['disc.title']}") String title,
                 @Value("#{systemProperties['disc.artist']}") String artist) 
{
    this.title = title;
    this.artist = artist;

}
getters and setters
}

Вот мой тест:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ExpressiveConfig.class)
public class BlankDiskTest {

@Autowired
private BlankDisc blankDisc;

@Test
public void isBlankDiscNotNull() {
    assertNotNull(blankDisc);
    System.out.println(blankDisc.getTitle());
    System.out.println(blankDisc.getArtist());
}
}

Тест пройден, объект не ноль, но система печатает ноль, ноль. Почему значения полей не устанавливаются?

PS

Если я делаю то же самое, но так:

public BlankDisc(@Value("${disc.title}") String title, 
@Value("${disc.artist}") String artist) {
    this.title = title;
    this.artist = artist;

}

тогда все ОК.

1 Ответ

0 голосов
/ 25 октября 2018
public BlankDisc(@Value("#{systemProperties['disc.title']}") String title,
                 @Value("#{systemProperties['disc.artist']}") String artist) 
{
    this.title = title;
    this.artist = artist;

}

Поскольку вы инициализируете данные из системных свойств, вам необходимо убедиться, что они существуют

@Test
public void isBlankDiscNotNull() {
    assertNotNull(blankDisc);
    assertNotNull(System.getProperty("disc.title"));
    assertNotNull(System.getProperty("disc.artist"));
    assertEquals(blankDisc.getTitle(),System.getProperty("disc.title"));
    assertEquals(blankDisc.getArtist(),System.getProperty("disc.artist"));
    System.out.println(blankDisc.getTitle());
    System.out.println(blankDisc.getArtist());
}
...