1

我正在尝试定义一个需要 2 个构造函数的 bean 和 @Autowire org.springframework.jdbc.object.StoredProcedure。有没有办法在连接这些 bean 时传递构造函数参数?下面是我的代码:

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

    @Autowired
    private StoredProcedure procedure;

......
}

这里 StoredProcedure 有一个构造函数来传递 jdbctemplate 和过程名称,这是动态的。

4

2 回答 2

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");
    }
...
于 2013-01-09T12:19:57.097 回答
0

当您 @Autowire 一个字段时,您假设 ApplicationContext 中已经存在所需类型的 bean。因此,为了让这段代码工作,您需要做的是声明一个这样的 bean(在 XML 中,或者,如果您想以编程方式配置它,请使用 @Bean - 请参阅此处的 Spring 文档)。

于 2013-01-09T12:43:22.513 回答