Pav*_*kin 23 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!
Run Code Online (Sandbox Code Playgroud)
如何获取方法的注释或获取真正的类对象?
PS Spring 2.5.6,JDKDynamicProxy(不是CGLib)
axt*_*avt 29
Spring的基于接口的代理实现TargetClassAware.
Daf*_*aff 17
您可以强制转换代理对象以获取它作为代理的对象和类(请参阅TargetSource):
Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();
Run Code Online (Sandbox Code Playgroud)
一般来说,你应该遵循Spring的原则,并尽可能不引人注目地获得正确的课程.这意味着尽可能少的类应该依赖于Spring Framework API(可能添加一个ClassLocator和一个SpringProxyClassLocator实现).
AopUtils.getTargetClass仅打开一层。AopProxyUtils.ultimateTargetClass(instance)代替使用。
(我知道这是一个 11 年前的问题,但它在 Google 中的排名仍然很高,因此它受益于新的答案)
| 归档时间: |
|
| 查看次数: |
15500 次 |
| 最近记录: |