这可能是一个愚蠢的问题,但是我无法找到任何令人满意的解决方案。在Java中,我们没有默认变量的概念,因此我试图使用@Value注释将属性文件中的默认值提供给我的函数参数/参数,但是我总是会得到null,并且我无法弄清楚为什么是这种情况。请帮助我解决问题或提供一些可能解决我问题的适当链接/参考。
MainApplication.java
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
ApplicationContext context = SpringApplication.run(NetappApplication.class, args);
Sample sample = context.getBean(Sample.class);
System.out.println(sample.check(null));
}
}
Sample.java
public interface Sample
{
public String check(String message);
}
SampleImpl.java
@Service
@PropertySource("classpath:app.properties")
public class SampleImpl implements Sample
{
@Value("${test}")
String message1;
@Override
public String check(@Value("${test}") String message)
{
return message;
}
}
app.properties
test=anand
答案 0 :(得分:0)
但是您正在将空值传递给您的方法...
如果属性文件中未定义未定义,也许您想做的就是为test
分配默认值:
@Value("${test:default}");
然后,如果占位符解析程序未从props文件中获取值,则Spring通过属性自动连接属性时,它将使用:
之后的内容。
(我能想到的)最好的用例是创建Spring配置时。
假设您有一个配置类:用于数据库访问。简单地说:
@Configuration
public class DbConfig {
@Value("${url:localhost}")
String dbUrl;
// rest for driver, user, pass etc
public DataSource createDatasource() {
// here you use some DataSourceBuilder to configure connection
}
}
现在,当Spring应用程序启动时,属性的值将被解析,并且正如我上面所写的,您可以在属性值和默认值之间切换。但是,只有在应用启动并由Spring创建您的bean时,它才完成一次。
如果要在运行时检查传入的参数,则简单的null检查就足够了。
@Value("${test}")
String message1;
@Override
public String check(String message) {
if (message == null) {
return message1;
}
}