В моем приложении я хотел бы создать экземпляр класса по требованию и передать некоторые параметры времени выполнения, а также чтобы Spring автоматически выполнял любые @Autowired
зависимости. Например, класс, который я хотел бы создать по требованию:
@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class FileProcess implements Runnable
{
@Autowired
private MyDAO myDAO;
private String configOne;
private String configTwo;
@Override
public void run()
{
}
}
Объект myDAO
уже существует в ApplicationContext, и я бы хотел, чтобы Spring выполнил эту зависимость для меня. На самом деле, любое создание этого класса не должно знать внутренности FileProcess
только потому, что для этого требуются параметры конфигурации configOne
и configTwo
Чтобы получить экземпляр FileProcess
Я использовал getBean()
метод ApplicationContext
, но я не могу передать только параметры конфигурации:
final FileProcess fileProcess = this.applicationContext.getBean(FileProcess.class, configOne, configTwo)
Это приводит к ошибке:
Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities
Я обнаружил, что независимо от того, какой конструктор я добавляю к FileProcess
, я получаю одну и ту же ошибку. Я хотел бы только передать параметры конфигурации, а не, в этом случае не экземпляр MyDAO
. Опять же, необходимость передать экземпляр MyDAO означает, что вызывающий объект должен знать внутренние компоненты FileProcess
и в целом должен знать о сфере действия таких компонентов.
Есть ли способ, которым я могу этого достичь без необходимости прибегать к @Configuration
классу и @Bean
аннотированному методу?