Как к @Autowire бобу с конструктором

Я пытаюсь определить боб и @Autowire org.springframework.jdbc.object. StoredProcedure, который потребовал 2 конструкторов. Есть ли способ, которым я могу передать аргумент конструктора, телеграфируя эти бобы? Ниже мой код:

@Component("procedure")
public class ExecuteStoreProcedure extends AbstractImutableDAO{

    @Autowired
    private StoredProcedure procedure;

......
}

Здесь у StoredProcedure есть конструктор, чтобы передать jdbctemplate и имя процедуры, которое является динамичным.

1
добавлено отредактировано
Просмотры: 2
nl ja de
В котором пути вы планируете передать jdbctemplate и имя процедуры? Почему didn' t вы создают определенные бобы в весенней конфигурации XML? Как жесткое решение вы в состоянии ввести формируемый FactoryBean (static.springsource.org/spring/docs/3.1.x/…).
добавлено автор Taky, источник
Таким образом, ваш вопрос состоит в том, как добавить StoredProcedure в ApplicationContext? Если StoredProcedure - сторонний класс, вы в состоянии расширить его и аннотировать новый класс соответствующим.
добавлено автор Taky, источник
Я надеюсь формировать с с аннотацией, а не xml файлом (не уверенный, что этот выбор доступен Весной), также мое имя процедуры динамичное, который будет аргументом методу в классе
добавлено автор user1917435, источник

2 ответы

Возможно, я не понимаю вопроса, но вам не нужен конструктор params, телеграфируя, вы configire ваш боб (StoredProcedure) в context.xml


    
    

Весна создает его с данным конструктором args и вводит боб в вашу область

@Autowired
private StoredProcedure procedure;

Если не хотят использовать xml, он не изменяет идею

@Configuration
@PropertySource("spring.properties")
@EnableTransactionManagement
public class Test3 {
    @Autowired 
    Environment env;  

    @Bean 
    public ExecuteStoreProcedure getExecuteStoreProcedure() {
        ...
    }

    @Bean 
    public DataSource getDataSource() {
       ...
    }

    @Bean 
    public StoredProcedure getStoredProcedure() {
        return new MyStoredProcedure(getDataSource(), "proc1");
    }
...
4
добавлено
+1 это правильно, но название поля должно быть "proc1"
добавлено автор Jerome Cance, источник
@user1917435 я приложил пример с AnnotationConfigApplicationContext, но ' имя процедуры будет динамичным во время time', которым управляют; все еще не ясно
добавлено автор Evgeniy Dorofeev, источник
Я не думаю, что вам нужен он, Спринг знает, что это - единичный предмет и возвратит случай из тайника
добавлено автор Evgeniy Dorofeev, источник
Спасибо за ответ. Но, я надеялся формировать ту же самую аннотацию использования, также в моем случае, имя процедуры будет динамичным в течение времени выполнения, invoker класс может передать любое имя процедуры и выполнять его
добавлено автор user1917435, источник
Спасибо, этот ответ часть моего вопроса. Другой беспорядок, который я имею, делают мы требуем, чтобы создать боб как @Bean общественный StoredProcedure getStoredProcedure() {возвращают новый MyStoredProcedure (getDataSource (), "proc1");} can' t мы избегаем нового оператора?
добавлено автор user1917435, источник

Когда вы @Autowire область, вы предполагаете, что боб необходимого типа уже существует в ApplicationContext. Таким образом, то, что необходимо сделать, чтобы заставить этот код работать, должно объявить такой боб (или в xml или, если вы хотите формировать его программно, использование @Bean-видит Весенняя документация здесь).

0
добавлено