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


简单的来说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);
    }








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值