如何使用构造函数@Autowire bean

时间:2013-01-09 11:56:19

标签: java spring

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

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

    @Autowired
    private StoredProcedure procedure;

......
}

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

2 个答案:

答案 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)。