0

要するに...私のアスペクトは(@Beforeによる)呼び出しをキャッチします。joinpoint から Bean の名前を取得できます

 myapp.dao.BookRepository

春のxmlでは、次のようになります。

<bean id="bookRepo" class="myapp.dao.BookRepository">
    <property name="dataSource" ref="dataSource" />
</bean>

私がやりたいのは、呼び出されたメソッドで以下のようにそのプロパティを設定することだけです。

そのクラスでローカルにそれを行うことができます(メソッド本体の最初の行):

@Override
public Collection<Book> getAll() {
    jdbcTemplate.setDataSource(dataSource); // this line I want to move to the aspect
    return jdbcTemplate.query("select * from Book", new RowMapper<Book>() {
        public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
            return extractBook(rs);
        }
    });
}

残念ながら、私はその面でそれをしなければなりませんでした。また、そのメソッドを継承する他の多くのクラスがあるため、大きなスイッチなしでキャストすることはできません (Bean 名を確認し、適切なクラスにキャストします)。このようなことが春に可能かどうか教えてください。

4

1 に答える 1

0

私はあなたがすべきところにアスペクトを使っていないと信じています!私には、AOP によって処理される問題ではないようです。

複数のデータソースがありますか? データソースが 1 つしかない場合は、データソースを Spring XML に挿入し、JdbcTemplateそこで構成します。

複数のデータソースがある場合はjdbcTemplate、クラスで as フィールドを使用しないでください。そうしないと、各スレッドが独自のデータソースを単一のjdbcTemplateand....

于 2013-04-20T21:09:16.563 に答える