简而言之...我的方面捕获了一个调用(由@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名称并转换为适当的类)。 如果春天有这样的事情,请告诉我。
答案 0 :(得分:0)
我相信你不会在任何地方使用Aspects! AOP对我来说似乎不是一个问题。
您有多个数据源吗?如果您只有一个数据源,只需在Spring XML中注入数据源,并在那里配置JdbcTemplate
。
如果您有多个数据源,请不要在类中使用jdbcTemplate
作为字段,否则您将在并发环境中遇到奇怪的错误,因为每个线程在一个{{}中设置自己的数据源{1}}和....