
[英]Spring configuration in Java - Create and use 2 beans of same class NOT using Autowired
[英]Declaring beans inside a ConfigurationProperties class, using the same configuration property
我有一个名为UserData
的 java class,它有一个名为users
的字段,我正在通过使用@ConfigurationProperties
注释从我的 spring-boot 应用application.yml
中的 application.yml 读取它。
在这个 class 中,我想声明另一个 bean 来查找最老的用户。 当我尝试创建getOldestUser
bean 时,我在getOldestUser
bean 的初始化中得到一个NullPointerException
,因为users
变量是null
。
这是我的代码的样子:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@Configuration
@ConfigurationProperties
@EnableConfigurationProperties
public class UserData {
Map<String, Integer > users;
@Bean
public String getOldestUser() {
Integer maxAge = 0;
String oldestUser = null;
for (Map.Entry<String, Integer> entry : users.entrySet()) { // This line throws NPE, because 'users' is null
if(entry.getValue() > maxAge) {
oldestUser = entry.getKey();
maxAge = entry.getValue();
}
}
return oldestUser;
}
}
这是 application.yml 中的用户声明:
users:
joey: 32
jim: 29
我如何访问方法 bean getOldestUser
中的 class bean userData
的字段? 我还尝试将userData
bean 作为参数传递给此方法,但这也不起作用。
首先,尝试将配置部分从属性拆分为单独的类。
此外, @ConfigurationProperties
注释需要有一个前缀,它将所有子属性绑定到字段。
最后,您作为 spring bean 创建的方法getOldestUser
只是一个计算 function,它可以在UserProperties
class 下,并在您需要此数据时调用,不需要 spring:)。
data:
users:
joey: 32
jim: 29
@Getter
@Setter
@ConfigurationProperties(prefix = "data")
public class UserProperties{
private Map<String, Integer > users;
public String getOldestUser() {
Integer maxAge = 0;
String oldestUser = null;
for (Map.Entry<String, Integer> entry : users.entrySet()) { // This line throws NPE, because 'users' is null
if(entry.getValue() > maxAge) {
oldestUser = entry.getKey();
maxAge = entry.getValue();
}
}
return oldestUser;
}
}
@Configuration
@EnableConfigurationProperties(UserProperties.class)
public class UserConfiguration {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.