Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在执行之前使用AspectJ切入点修改已执行的SQL吗_Java_Sql Server_Aspectj_Pointcuts - Fatal编程技术网

Java 我可以在执行之前使用AspectJ切入点修改已执行的SQL吗

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

我正在尝试向使用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()执行

任何指点都将不胜感激


谢谢

如果您想修改参数值,您需要使用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);}