简体   繁体   中英

How to set default values of model class variables from yaml file?

In a service file I would simply use @Value and initialize the variable instially there. I have tried this approach in a model class but (I assume how things get autowired and that its a model class) this results in it always being null .

The need for this comes out that in different environments the default value is always different.

@Value("${type}")
private String type;

I would avoid trying to use Spring logic inside the models as they are not Spring beans themselves. Maybe use some form of a creational (pattern) bean in which the models are constructed, for example:

@Component
public class ModelFactory {
    @Value("${some.value}")
    private String someValue;

    public SomeModel createNewInstance(Class<SomeModel> clazz) {
        return new SomeModel(someValue);
    }
}
public class SomeModel {
    private String someValue;

    public SomeModel(String someValue) {
        this.someValue = someValue;
    }

    public String getSomeValue() {
        return someValue;
    }
}
@ExtendWith({SpringExtension.class})
@TestPropertySource(properties = "some.value=" + ModelFactoryTest.TEST_VALUE)
@Import(ModelFactory.class)
class ModelFactoryTest {

    protected static final String TEST_VALUE = "testValue";

    @Autowired
    private ModelFactory modelFactory;

    @Test
    public void test() {
        SomeModel someModel = modelFactory.createNewInstance(SomeModel.class);
        Assertions.assertEquals(TEST_VALUE, someModel.getSomeValue());
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM