spring|Java程序员必知:Spring面试之AOP(JDK动态代理实现)( 二 )


  • 【spring|Java程序员必知:Spring面试之AOP(JDK动态代理实现)】Proxy类中有一个静态方法 , newProxyInstance(ClassLoader loader Class<?>[
    interfacesInvocationHandler h)通过他可以生成一个代理对象 , 他需要传入三个参数:类加载器、类实现的接口、InvocationHandler接口 ,

    对于InvocationHandler接口 , 可以通过匿名内部类来实现 , 也可以通过直接实现InvocationHandler接口 。

    InvocationHandler里有一个方法public Object invoke(Object proxy Method method Object[
    args) throws Throwable在调用目标类的任何一个方法的时候 , 都相当于执行了这个方法 。 所以我们只需要控制invoke这个方法就好了 。

    对于上面的第三个参数 , 传入接口的实例 , 所以直接传入this就好了 , 最后返回一个代理类 。

    使用JDK动态代理 , 因为他可以对接口产生动态代理 , 创建UserDao的代理类
    @return 代理对象

    public Object createProxy(){
        Object proxy = Proxy.newProxyInstance(UserDao.class.getClassLoader()     UserDaoImpl.class.getInterfaces() this);
    return proxy;

  • 对于invoke方法 , 我们可以通过method.getName()来判断需要对哪个方法(即切入点)来进行增强 。


  • 对于进行调用的时候 , 需要创建他的代理类来进行创建 ,

  • 最后实现了对切入点的增强 。
  •