我使用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)
答案 0 :(得分:27)
Spring的基于接口的代理实现TargetClassAware
。
答案 1 :(得分:17)
您可以强制转换代理对象以获取它作为代理的对象和类(请参阅TargetSource):
Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();
一般来说,你应该遵循Spring的原则,并尽可能不引人注目地获得正确的课程。这意味着尽可能少的类应该依赖于Spring Framework API(可能添加一个ClassLocator和一个SpringProxyClassLocator实现)。
答案 2 :(得分:13)