如何用构造函数@Autowire bean



我试图定义一个bean和@Autowire org.springframework.jdbc.object.StoredProcedure,这需要2个构造函数。有一种方法,我可以传递构造函数参数,而连接这些bean ?下面是我的代码:

@Component("procedure")
public class ExecuteStoreProcedure extends AbstractImutableDAO{
    @Autowired
    private StoredProcedure procedure;
......
}

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

也许我不理解这个问题,但是在连接时不需要构造函数参数,您可以在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使用给定的构造函数参数创建它,并将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");
    }
...

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

最新更新