我想在Spring Boot批注中使用相同的类但使用不同的属性声明多个对象
application.properties
test1.name=Ken
test2.name=Anthony
代码示例
@Component
public class People {
private String name;
public String getName() {
return this.name;
}
}
@SpringBootApplication
public class Application {
@AutoWired
public People man1;
@AutoWired
public People man2;
System.out.println(man1.getName());
System.out.println(man2.getName());
}
我尝试在声明man1之前添加@ConfigurationProperties(prefix="test1")
但它返回了
The annotation @ConfigurationProperties is disallowed for this location
答案 0 :(得分:1)
@ConfigurationProperties
仅允许放在@Bean
类中或类级别的@Configuration
方法上。对于前一种情况,它将把application.properties
的属性映射到bean实例,这意味着您必须:
@SpringBootApplication
public class Application {
@Bean
@ConfigurationProperties(prefix="test1")
public People man1() {
return new People();
}
@Bean
@ConfigurationProperties(prefix="test2")
public People man2() {
return new People();
}
}
并且由于man1
和man2
的类型相同,因此您必须进一步使用@Qualifier
通过指定其bean名称来告诉Spring您实际要注入的实例。可以通过@Bean("someBeanName")
来配置Bean名称。如果使用@Bean
而不配置bean名称,则将方法名称用作bean名称。 (即man1
和man2
)
@Autowired
@Qualifier("man1")
public People man1;
@Autowired
@Qualifier("man2")
public People man2;