【问题标题】:Spring AOP Proxy for java.security.KeyStorejava.security.KeyStore 的 Spring AOP 代理
【发布时间】:2014-10-08 16:43:56
【问题描述】:

我想知道有没有办法为java.security.KeyStore 制作一个 Spring AOP 代理,这里几乎没有障碍:

  • KeyStore 没有默认构造函数
  • KeyStore 的所有方法都是final

我知道不可能使用上述约束创建 Spring AOP 代理,但无论如何我需要以某种方式计算应用程序中 KeyStore 的方法调用。有人可以提出一些绕过 Spring AOP 约束的方法或其他方法吗?

【问题讨论】:

    标签: java spring aop keystore cglib


    【解决方案1】:

    如果您可以控制调用代码 - 并且希望您这样做,因为您正在谈论的是您自己的应用程序 - 并且愿意使用完整的 AspectJ(不需要任何代理)而不是 Spring-AOP,那么您可以使用call() 切入点,而不是仅限于Spring-AOP 的execution() 切入点。切入点看起来像这样(未经测试,从内存中破解):

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

    如果要将切入点扩展到子类,请在类名后添加+

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

    如果构造函数调用来自您可以编入的代码,您甚至可以拦截它们:

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

    【讨论】:

    • 感谢您的回答,这可能是一个解决方案。还有一个问题 - 是否可以拦截对 KeyStore 特定实例的调用?我有几个,但只对一个感兴趣
    • 可能。我需要更深入地了解您的代码才能回答这个问题。