gpt4 book ai didi

java - 尝试使用 @Value 注释作为函数参数访问时,无法解析属性文件中的变量

转载 作者:行者123 更新时间:2023-12-02 01:16:49 24 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我无法找到任何令人满意的解决方案来解决我的问题。在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));
}

}

示例.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;
}

}

应用程序属性

test=anand

最佳答案

但是您正在将 null 传递给您的方法...

也许您想要做的是为 test 分配默认值,以防属性文件中未定义:

@Value("${test:default}");

然后,当 Spring Autowiring 属性时,如果占位符解析器没有从 props 文件中获取值,它将使用 : 之后的内容。

(我能想到的)最好的用例是当您创建 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 时。

如果您想在运行时检查传入参数,简单的空检查就足够了。

@Value("${test}")
String message1;

@Override
public String check(String message) {
if (message == null) {
return message1;
}
}

关于java - 尝试使用 @Value 注释作为函数参数访问时,无法解析属性文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57656518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com