【问题标题】:How do I get the Class from a bean that is going through an AOP Proxy?如何从通过 AOP 代理的 bean 中获取类?
【发布时间】:2012-03-28 12:54:52
【问题描述】:

我有实现接口 I 的类 A。因此 spring 将其配置为一个 bean,该 bean 作为属性注入到另一个 B 类的 bean 中。 B 类代码尝试使用注入的属性 [i.getClass().toString()A 的完全限定名称(包 + 类名) /strong>]...这导致只获取对象class $Proxy27的代理名称...我也尝试过i.getClass().getCanonicalName() ;结果一样...

那么,获取代理名称而不是类名称的原因可能是什么?我需要完全限定的名称

【问题讨论】:

  • 你应该把你的问题放在这个问题中。这样别人就可以帮助你了。

标签: spring


【解决方案1】:

如果要获取类名,请执行以下操作:

Class<?> targetClass = AopUtils.getTargetClass(bean);

【讨论】:

  • 相同的结果:/ .. 我注入的 bean 实现了 Spring Batch ItemProcessor 接口。所以使用你的建议我做了 AopUtils.getTargetClass(itemProcessor);这是执行代码(BatchRunTaskListProcessorWrapper)的类的属性,它也实现了ItemProcessor ..但是这个调用给了我执行类的名称(BatchRunTaskListProcessorWrapper.process())
【解决方案2】:

似乎 Spring 将您的 bean 包装到 AOP 代理中,例如应用一些建议或维护注入 bean 的范围(例如,将非单例 bean 注入单例时)。

【讨论】:

    【解决方案3】:

    这对我有用:

    Class<?> clazz = AopProxyUtils.ultimateTargetClass(proxy);
    

    在这里找到: http://www.solidsyntax.be/2013/12/10/access-concrete-class-spring-proxy/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 2011-11-20
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多