如何在Spring Boot中声明具有相同类但使用不同属性的多个对象

时间:2019-06-26 03:23:51

标签: spring spring-boot annotations javabeans

我想在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

1 个答案:

答案 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();
    }
} 

并且由于man1man2的类型相同,因此您必须进一步使用@Qualifier通过指定其bean名称来告诉Spring您实际要注入的实例。可以通过@Bean("someBeanName")来配置Bean名称。如果使用@Bean而不配置bean名称,则将方法名称用作bean名称。 (即man1man2

@Autowired
@Qualifier("man1")
public People man1;

@Autowired
@Qualifier("man2")
public People man2;