java 动态代理

  代理模式是基础的代理模式之一。经常使用的AOP,日志都是代理模式现象的。在不改变原来的类或者方法的前提下,对外提供增值服务。java

java 实现代理的方式ide

  1)代理分静态代理,测试

  2)jdk动态代理,this

  3)Cglib动态代理。spa

静态代理实现方式代理

  代码静态代理,主要经过继承相同的接口日志

java jdk 动态代理实现方式code

  java jdk 动态代理。主要是实现 InvocationHandler 接口便可对象

举个例子blog

package proxy; /** * @author ZHONGZHENG664 * @date 2018/8/31. */
public interface User { void getNmae(); void getAge(); /** * 获取工资 * @return
     */
    int getSarly(int month); }
View Code

实现类

package proxy; /** * @author ZHONGZHENG664 * @date 2018/8/31. */
public class RealUser implements User { public void getNmae() { System.out.println("my name is xiaoming"); } public void getAge() { System.out.println("my age is 14"); } public int getSarly(int month) { return month+200; } }
View Code

代理实现:增长日志

package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * @author ZHONGZHENG664 * @date 2018/8/31. */
public class DynamicProxy implements InvocationHandler { private Object user; public DynamicProxy(Object user) { this.user = user; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before rent house"); System.out.println("Method:" + method); // 当代理对象调用真实对象的方法时,其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用
 method.invoke(user, args); //  在代理真实对象后咱们也能够添加一些本身的操做
        System.out.println("after rent house"); return null; } }
View Code

 

测试类:

package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; /** * @author ZHONGZHENG664 * @date 2018/8/31. */
public class TestProxy { public static void main(String[] gars) { RealUser realUser = new RealUser(); DynamicProxy dynamicProxy = new DynamicProxy(realUser); User user = (User) Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(), realUser.getClass().getInterfaces(), dynamicProxy); System.out.println(user.getClass().getName()); user.getAge(); user.getNmae(); System.out.println("my sarly:"+user.getSarly(80)); } }
View Code
相关文章
相关标签/搜索