Spring Java Config: Как создать прототип @bean с аргументами времени выполнения?JAVA

Программисты JAVA общаются здесь
Anonymous
Spring Java Config: Как создать прототип @bean с аргументами времени выполнения?

Сообщение Anonymous »

Используя конфигурацию Java Spring, мне нужно приобрести/создать создание прототипового боба с аргументами конструктора, которые можно получить только во время выполнения. Рассмотрим следующий пример кода (упрощен для краткости): < /p>

Код: Выделить всё

@Autowired
private ApplicationContext appCtx;

public void onRequest(Request request) {
//request is already validated
String name = request.getParameter("name");
Thing thing = appCtx.getBean(Thing.class, name);

//System.out.println(thing.getName()); //prints name
}
< /code>

Где класс вещи определяется следующим образом: < /p>

public class Thing {

private final String name;

@Autowired
private SomeComponent someComponent;

@Autowired
private AnotherComponent anotherComponent;

public Thing(String name) {
this.name = name;
}

public String getName() {
return this.name;
}
}
Имя уведомления является окончательным : оно может быть предоставлено только через конструктор и гарантирует неизменность. Другими зависимостями являются зависимости от внедрения в классе Thing < /code> и не должны быть известны (тесно связано) реализация обработчика запросов. < /P>

Этот код отлично работает с Spring XML Config, например: < /p>




< /code>

Как мне добиться того же самого с конфигурацией Java? Следующее не работает с помощью Spring 3.x: < /p>

@Bean
@Scope("prototype")
public Thing thing(String name) {
return new Thing(name);
}
< /code>

Теперь я мог < /em> создать фабрику, например ,::

public interface ThingFactory {
public Thing createThing(String name);
}
< /code>

Но что побеждает всю точку использования пружины, чтобы заменить сервицелокатор и шаблон заводской конструкции < /em>, что было бы идеальным для этого случая использования. Интерфейс < /li>
Определение заводской реализации < /li>
Написание тестов для заводской реализации < /li>
< /ul>

Это тонна работы (относительно говоря) для чего -то столь тривиального, что пружина уже поддерживает xml.>

Подробнее здесь: https://stackoverflow.com/questions/221 ... ntime-argu

Вернуться в «JAVA»