具有bean名称的代码中的Spring设置属性

时间:2013-04-20 16:54:24

标签: java spring

简而言之...我的方面捕获了一个调用(由@Before)。 我可以从joinpoint获得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名称并转换为适当的类)。  如果春天有这样的事情,请告诉我。

1 个答案:

答案 0 :(得分:0)

我相信你不会在任何地方使用Aspects! AOP对我来说似乎不是一个问题。

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

如果您有多个数据源,请不要在类中使用jdbcTemplate作为字段,否则您将在并发环境中遇到奇怪的错误,因为每个线程在一个{{}中设置自己的数据源{1}}和....