2013-01-09 28 views
1

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

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

    @Autowired 
    private StoredProcedure procedure; 

...... 
} 

这里的StoredProcedure有一个构造函数传递的JdbcTemplate和程序名称,它是动态的。

+0

您打算通过哪种方式传递jdbctemplate和过程名称?为什么不在Spring XML配置中创建特定的bean?作为硬核解决方案,您可以注入配置的FactoryBean(http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-extension-factorybean)。 – Taky

+0

我正在寻找使用注释而不是xml文件进行配置(不确定此选项在Spring中是否可用),我的过程名称也是动态的,它将成为类中的方法的参数 – user1917435

+1

因此,您的问题是如何添加StoredProcedure到ApplicationContext中?如果StoredProcedure是第三方类,则可以扩展它,并用适当的方式标注新类。 – Taky

回答

4

也许我不明白的问题,但接线时你的context.xml configire你的bean(StoredProcedure的)你不需要构造PARAMS

<bean id="proc1" class="org.springframework.jdbc.object.StoredProcedure"> 
    <constructor-arg name="ds" ref="ds" /> 
    <constructor-arg name="name" value="proc1" /> 
</bean> 

春与给定的构造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"); 
    } 
... 
+0

+1这是正确的,但该字段的名称应该是“proc1” –

+0

感谢您的回应。但是,我正在考虑使用注释来配置它,在我的情况下,在运行时过程名称将是动态的,调用者类可以传递任何过程名并执行它 – user1917435

+0

@ user1917435我附加了一个AnnotationConfigApplicationContext示例,程序名称将在运行时动态'仍然不明确 –

0

当你@Autowire一个字段时,你假设在ApplicationContext中已经存在一个必需类型的bean。所以为了让这段代码能够工作,你需要做的是声明一个这样的bean(或者是XML,或者,如果你想用编程的方式配置它,使用@ Bean--见Spring documentation here)。