0

简而言之......我的方面捕获了一个调用(由@Before)。我可以从连接点获取 bean 的名称

 myapp.dao.BookRepository

在 Spring 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 处理的问题。

您有多个数据源吗?如果您只有一个数据源,只需在 Spring XML 中注入数据源,并JdbcTemplate在那里进行配置。

如果你有多个数据源,不要在你的类中使用as 字段,否则你会在并发环境中遇到奇怪的错误,因为每个线程都在一个单一的和...jdbcTemplate中设置自己的数据源。jdbcTemplate

于 2013-04-20T21:09:16.563 回答