我不确定我是否理解正确,但是从我得到的结果来看,我可以使用@Value
注释从我的application.properties
中读取值。
我发现这仅适用于Beans
。
我这样定义了一个豆
@Service
public class DBConfigBean {
@Value("${spring.datasource.username}")
private String userName;
@Bean
public String getName() {
return this.userName;
}
}
应用程序启动时,我可以检索用户名,但是-如何在运行时访问该值?
每当我这样做
DBConfigBean conf = new DBConfigBean()
conf.getName();
*编辑*
由于注释,我可以使用此配置DBConfigBean-但是当我想在另一个类中使用它时,我的最初问题仍然存在
@Configurable
public SomeOtherClass {
@Autowired
private DBConfigBean dbConfig; // IS NULL
public void DoStuff() {
// read the config value from dbConfig
}
}
如何在一些可以定义为bean的帮助程序类中读取DBConfig
谢谢
答案 0 :(得分:3)
正如Eirini所说,您必须注入咖啡豆。
@Value注释仅适用于Spring bean。
还有另一种使用@ConfigurationProperties访问配置的方法。 在那里定义一个类来保存配置。 主要优点是,它是类型安全的,并且配置在一个地方。
答案 1 :(得分:1)
您不应使用新的运算符实例化您的服务。您应该注入它,例如
@Autowired
private DBConfigBean dbConfig;
然后是dbConfig.getName();
此外,您的@Bean
方法中不需要任何getName()
装饰器
您只需要告诉spring在哪里搜索带注释的bean。因此,在您的配置中,您可以添加以下内容:
@ComponentScan(basePackages = {"a.package.containing.the.service",
"another.package.containing.the.service"})
春天意识到,@Value
,@Autowired
等批注只能与bean一起使用。
将您的SomeOtherClass
声明为Bean,并将包配置添加到您的@Configuration类中
@Bean
private SomeOtherClass someOtherClass;
然后
@Configuration
@ComponentScan(basePackages = {"a.package.containing.the.service"
"some.other.class.package"})
public class AppConfiguration {
//By the way you can also define beans like:
@Bean
public AwesomeService service() {
return new AwesomeService();
}
}
答案 2 :(得分:1)
用@Component注释包装DBConfig并使用@Autowired注入它:
@Autowired
private DBConfig dbConfig;
答案 3 :(得分:0)
只需在您的DBConfigBean类中添加以下注释:
@PropertySource(value = {“” classpath:application.properties“})