Как объявить несколько объектов с одним и тем же классом, но с использованием разных свойств при весенней загрузке - PullRequest
0 голосов
/ 26 июня 2019

Я хочу объявить несколько объектов, используя один и тот же класс, но разные свойства в загрузочной аннотации Spring

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

Я пытаюсь добавить @ConfigurationProperties(prefix="test1") перед объявлением man1

, но он вернул

The annotation @ConfigurationProperties is disallowed for this location

1 Ответ

1 голос
/ 26 июня 2019

@ConfigurationProperties допускается только для метода @Bean в классе @Configuration или на уровне класса. В первом случае он отобразит свойства из application.properties в экземпляр компонента, что означает, что вы должны:

@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, чтобы сообщить Spring, какой экземпляр вы действительно хотите внедрить, указав его имя компонента. Имя компонента может быть настроено с помощью @Bean("someBeanName"). Если @Bean используется без настройки имени компонента, имя метода будет использоваться в качестве имени компонента. (т.е. man1 и man2)

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

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