2014-10-08 46 views
0

我想知道有没有什么办法让一个Spring AOP的代理为java.security.KeyStore,这里还有几个障碍:的Spring AOP代理的java.security.KeyStore中

  • 密钥库没有默认的构造函数
  • 密钥库的所有方法都是最终

我知道这是不可能使一个Spring AOP的代理上述限制,但无论如何,我需要以某种方式计算密钥库中的方法调用应用。任何人都可以提出一些方法来绕过Spring AOP约束或其他方式吗?

回答

0

如果你有调用代码的控制权 - 并希望你这样做,因为它是你自己的应用程序,你正在谈论 - 并愿意使用完整的AspectJ(它不需要任何代理)而不是Spring-AOP,你cann使用一个call()切入点,而不是限于Spring-AOP的execution()切入点。切入点会是这个样子(未经测试,从内存砍死):

@Pointcut("call(* java.security.KeyStore.*(..))") 

如果你想延长切入点的子类,类名后添加+

@Pointcut("call(* java.security.KeyStore+.*(..))") 

你甚至可以拦截构造函数调用,如果他们来自代码,你可以编织成:

@Pointcut("call(java.security.KeyStore+.new(..))") 
+0

谢谢你的答案,它可能是一个解决方案。还有一个问题 - 是否可以拦截对KeyStore特定实例的调用?我有几个,但只有一个 – erkfel 2014-10-09 19:07:20

+0

可能。我需要更多的洞察你的代码才能回答这个问题。 – kriegaex 2014-10-09 19:25:58