Это способ сделать то же самое в Java (начиная с пружины 3.x):
@Configuration
public class MySampleConfiguration {
@Bean
public Service service1() {
return new Service("first service");
}
@Bean
public Service service2() {
return new Service("second service");
}
}
Обновление 1
На основе OP комментарий:
Существуют разные варианты использования, некоторые требуют указания имен бинов, другие - нет.
Вариант использования 1:
Скажем, есть компонент, с которым нужно создать экземпляр, скажем, service1
:
public class SampleBean {
private final Service service;
public SampleBean(Service service) {
this.service = service;
}
}
В идеале вы не хотите указывать квалификатор в коде класса SampleBean
, потому что он вид убивает принцип внедрения зависимости до некоторой степени. Однако вы можете сделать это в конфигурации:
@Configuration
public class MySampleConfigurationWithQualifier {
@Bean(name = "service1")
public Service service1() {
return new Service1("first service");
}
@Bean(name = "service2")
public Service service2() {
return new Service2("second service");
}
@Bean
public SampleBean sampleBean(@Qualifier("service1") Service service) {
return new SampleBean(service);
}
}
Вариант использования 2:
Скажем, эти сервисы должны быть введены каким-то образом сбор (скажем, список) в другой компонент.
В этом случае нет необходимости указывать name
атрибут
public class SampleBean2 {
private final List<Service> services;
public SampleBean2(List<Service> services) {
this.services = services;
}
public void notifyOnSomeEvent(Event evt) {
for(Service service : services) {
service.notify(evt);
}
}
}
В этом случае конфигурация может выглядеть следующим образом:
@Configuration
public class MySampleConfigurationWithListInjection {
@Bean(name = "service1")
public Service service1() {
return new Service1("first service");
}
@Bean(name = "service2")
public Service service2() {
return new Service2("second service");
}
@Bean
public SampleBean2 sampleBean2(List<Service> services) {
return new SampleBean2(services);
}
}