我想用aspectj拦截所有java.sql.DataSource.getConnection方法,我使用了这个切入点:
"execution(public java.sql.Connection javax.sql.DataSource+.getConnection(..))"
效果很好。但是我遇到了一些类,例如 org.apache.tomcat.jdbc.pool.DataSource 是在类层次结构中实现的,这个切入点不起作用,其中 DataSource 方法位于层次结构中的一个类中,该层次结构不实现 DataSource ,只有最顶层的类实现了DataSource:
class BaseDataSource {
public Connection getConnection() throws SQLException {
return null;
}
public Connection getConnection(String username, String password) throws SQLException {
return null;
}
implements all DataSource Methods...
}
class MyDataSource extends BaseDataSource implements java.sql.DataSource{
//does not implement DataSource methods
}
BaseDataSource不实现DataSource,但具有所有DataSource方法的实现。
我发现唯一有效的切入点是:
execution(public java.sql.Connection *.getConnection(..)) && target(javax.sql.DataSource)
我的问题是否有更好的方法以及这个切入点的性能是否可能最差?
蝴蝶刀刀
相关分类