用的CGLIB代理的,不知道哪个出错了,不用CGLIB代理的话,就又会出现代理对象找不到该方法的异常 |
|
没有人啊??
|
|
2分 |
类型不能转换,代码呢
|
下面是BaseAction.java
package cn.han.action; import java.lang.reflect.ParameterizedType; import com.opensymphony.xwork2.Action; public T model; public BaseAction(){ Class clazz= GenericSuperClass.getGenericSuperclass(getClass()); @Override @Override } |
|
下面是GenericSuperClass.java
import java.lang.reflect.ParameterizedType; public class GenericSuperClass { /**范类转换*/ } |
|
下面是实现类的Action ElecTextAction.java
import javax.annotation.Resource; import org.springframework.context.annotation.Scope; import cn.han.domain.ElecText; } |
|
4分 |
http://www.blogjava.net/leisure/archive/2011/12/26/367185.html
这个能解决你的问题。 |
5分 |
LZ啊 你看看你的ElecTextAction BaseAction这些对象的实例是不是给Spring管理,让它创建了代理。
比如你用的ElecTextAction 对象的实例其实是代理。这时候你getClass() 这个Class对象可就不是你想要的Class了,这种情况下就会出现你说的异常。 |
ElecTextAction确实是Spring代理了。。那怎么弄呢
|
|
9分 |
对没用过CGLIB。 |
刚刚解决了,通过CGLIB代理生成的类应该是继承了被代理的类,所以getGenericSuperclass只是取到被代理类的Type。正常应该是要取到被代理类所继承的父类的Type,所以要先getSuperclass取到被代理类再getGenericSuperclass取到父类的Type才成
Type type = getClass().getGenericSuperclass(); if(!(type instanceof ParameterizedType)){ type = getClass().getSuperclass().getGenericSuperclass(); } Class<T> cls = (Class<T>)((ParameterizedType)type).getActualTypeArguments()[0]; |