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 は、指定されたコンストラクター引数でそれを作成し、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 するときは、必要なタイプの Bean が ApplicationContext に既に存在すると想定しています。したがって、このコードを機能させるために必要なことは、そのような Bean を宣言することです (XML で、またはプログラムで構成する場合は @Bean を使用して、Spring のドキュメントを参照してください)。

于 2013-01-09T12:43:22.513 に答える