我正在尝试定义一个bean和@Autowire org.springframework.jdbc.object.StoredProcedure,它需要2个构造函数。有没有办法在连接这些bean时传递构造函数参数?以下是我的代码:
@Component("procedure")
public class ExecuteStoreProcedure extends AbstractImutableDAO{
@Autowired
private StoredProcedure procedure;
......
}
这里StoredProcedure有一个构造函数来传递jdbctemplate和过程名,这是动态的。
答案 0 :(得分:4)
也许我不理解这个问题,但你在布线时不需要构造函数参数,你在context.xml中配置你的bean(StoredProcedure)
<bean id="proc1" class="org.springframework.jdbc.object.StoredProcedure">
<constructor-arg name="ds" ref="ds" />
<constructor-arg name="name" value="proc1" />
</bean>
Spring使用给定的构造函数args创建它并将bean注入到字段
中@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");
}
...
答案 1 :(得分:0)
当您@Autowire一个字段时,您假设ApplicationContext中已存在所需类型的bean。因此,为了使这段代码能够工作,您需要做的是声明一个这样的bean(在XML中,或者,如果您想以编程方式配置它,使用@ Bean-请参阅Spring documentation here)。