获取Spring bean的真正Class对象

时间:2010-02-18 14:20:13

标签: java spring spring-aop

我使用Spring注入bean。我正在使用一些注释来注释bean方法(Security,TransactionManagement,ExceptionHanling,Logging)。问题是:

我想创建JUnit测试以检查是否忘记注释某些方法。但Spring返回$ ProxyXXX类,没有任何方法注释..

Method[] methods = logic.getClass().getMethods();

  for (Method method : methods) {
     Annotation[] annotations = method.getAnnotations();   // empty array!

如何获取方法的注释或获取真正的类对象?

P.S。 Spring 2.5.6,JDKDynamicProxy(不是CGLib)

3 个答案:

答案 0 :(得分:27)

Spring的基于接口的代理实现TargetClassAware

答案 1 :(得分:17)

您可以强制转换代理对象以获取它作为代理的对象和类(请参阅TargetSource):

Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();

一般来说,你应该遵循Spring的原则,并尽可能不引人注目地获得正确的课程。这意味着尽可能少的类应该依赖于Spring Framework API(可能添加一个ClassLocator和一个SpringProxyClassLocator实现)。

答案 2 :(得分:13)