spring aop代理不了父类,会忽略从父类继承的方法。

来源:互联网 发布:网络攻防大赛试题 编辑:程序博客网 时间:2024/04/29 07:13
简单的来说spring aop有两种方式,全接口方式使用的是jdk的动态代理,针对接口;而非接口方式使用的是cglib,这种方式类似jdk动态代理,在运行期间生成的代理对象是针对目标类扩展的子类



下面使用jdk的动态代理做的一个例子,这个能代理到父类,我觉的如果你的项目中有baseDaoimpl的构造方法有
 ParameterizedType pt = (ParameterizedType) this.getClass()
                .getGenericSuperclass();
        this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
可能就代理不了,应该是this获取到的是代理对象,代理对象的Class的ParameterizedType 所以就会报错.


动态代理的例子,带继承


package com.xianlizg.project.util;public interface BaseInterface {     Integer  printAge(Integer age);}



package com.xianlizg.project.util;public class BaseInterfaceImpl implements BaseInterface {    public Integer printAge(Integer age) {        System.out.println(age);        return age;    }}


package com.xianlizg.project.util;public interface InterfaceTest extends  BaseInterface {   String printName(String name);}

package com.xianlizg.project.util;public class InterfaceTestImpl extends BaseInterfaceImpl implements  InterfaceTest {    public String printName(String name) {        System.out.println(name);        return "aa";    }}


package com.xianlizg.project.util;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class HelpInvokeIntercept implements InvocationHandler {    private Object targerObj;    HelpInvokeIntercept(Object targerObj){        this.targerObj=targerObj;    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        //System.out.print("检查权限");<span style="white-space:pre"></span>//这里可以做很多事,拦截等,spring aop就是把这里挖出来,进行可配置拦截,每次调用方法就会,来这判断        return method.invoke( targerObj, args);    }}

测试代码:


    @org.junit.Test    public  void  proxyyTest(){        InterfaceTest interfaceTest = (InterfaceTest)Proxy.newProxyInstance(InterfaceTest.class.getClassLoader(),new Class[] { InterfaceTest.class },new HelpInvokeIntercept(new InterfaceTestImpl()));        interfaceTest.printName("aaa");        interfaceTest.printAge(22);    }








0 0
原创粉丝点击