Java 我可以在执行之前使用AspectJ切入点修改已执行的SQL吗
我正在尝试向使用AspectJ的系统中执行的所有SQL添加一段特定的SQL 我以前没有使用过AspectJ,但我相信我需要做的是在上创建一个切入点 调用(PreparedStatement连接.prepareStatement(字符串)) 并提供建议 之前(连接con,字符串sql): 调用(PreparedStatement连接.prepareStatement(字符串)) &&目标(con) &&args(sql){ sql=“exec myStordProc();”+sql; } 之后Connection.prepareStatement()方法将继续使用更改后的字符串 或者我应该拦截对prepareStatement和executeQuery的调用,并创建一条建议,将其更改为addBatch(),将我的存储过程调用添加为第一批sql,然后原始sql最终使用executeBatch()执行 任何指点都将不胜感激Java 我可以在执行之前使用AspectJ切入点修改已执行的SQL吗,java,sql-server,aspectj,pointcuts,Java,Sql Server,Aspectj,Pointcuts,我正在尝试向使用AspectJ的系统中执行的所有SQL添加一段特定的SQL 我以前没有使用过AspectJ,但我相信我需要做的是在上创建一个切入点 调用(PreparedStatement连接.prepareStatement(字符串)) 并提供建议 之前(连接con,字符串sql): 调用(PreparedStatement连接.prepareStatement(字符串)) &&目标(con) &&args(sql){ sql=“exec myStordProc();”+sql; } 之后Co
谢谢如果您想修改参数值,您需要使用around advice,以便您可以使用修改后的值拨打电话:
around(...): ... {
proceed("exec myStordProc();" + sql);
}
如果要修改参数值,则需要使用around advice,以便可以使用修改后的值进行调用:
around(...): ... {
proceed("exec myStordProc();" + sql);
}
乔,我想这是可能的,但看起来很可怕。我强烈建议你设法找到另一个解决办法。问问自己为什么?奥古斯托,它看起来确实吓人,我认为另一个选择是创建一个包装器/类来实现Java.SQL连接和Java.SQL连接的重构实例到包装器,但是我有点担心重构的发生。乔,我认为有可能做到这一点,但是它看起来很可怕。我强烈建议你设法找到另一个解决办法。问问自己为什么?“奥古斯托,它看起来确实吓人,我认为另一个选择是创建一个包装器/类来实现Java.SQL连接和Java.SQL连接的重构实例到包装器,但是我有点担心重构的出现。谢谢。我要给它一个使用它的机会:<代码>公共方面审计方面。{pointcut prepareStatement(String sql):调用(PreparedStatement Connection.prepareStatement(..)&&args(sql);对象周围(String sql):prepareStatement(sql){返回继续(“exec dbo.AuditDatabase_SetSessionInfo”+sql);}谢谢,我打算用这个:
公共方面AuditAspect{pointcut prepareStatement}(字符串sql):调用(PreparedStatement Connection.prepareStatement(..)&&args(sql);对象周围(字符串sql):prepareStatement(sql){返回继续(“exec dbo.AuditDatabase_SetSessionInfo”+sql);}