2014-10-08 49 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