当前位置: 移动技术网 > IT编程>开发语言>Java > JDK动态代理

JDK动态代理

2019年06月09日  | 移动技术网IT编程  | 我要评论

jdk动态代理是通过jdk中的 java.lang.reflect.proxy 类来实现的。

举例:

1.有如下接口和实现类

接口:

public interface userdao {

    public void save();
    public void update();
    public void delete();
    public void find();


}

 实现类:

public class userdaoimpl implements userdao {
    public void save() {
        system.out.println("save 添加用户");
    }

    public void update() {
        system.out.println("update 修改用户");
    }

    public void delete() {
        system.out.println("delete 删除用户");
    }

    public void find() {
        system.out.println("find 查询用户");
    }
}

 2.创建切面类myaspect

public class myaspect {

    public void mybefore(){
        system.out.println("方法执行前");
    }

    public void myafter(){
        system.out.println("方法执行后");
    }

}

 3.创建mybeanfactory类,在该类中通过proxy实现动态代理

public class mybeanfactory {

    public static userdao getbean(){
        // 1.准备目标类
        final userdao userdao = new userdaoimpl(); // 在spring中通过注入获取单例对象
        //2.创建切面类
        final myaspect myaspect = new myaspect();
        //3.使用代理类,进行增强
        return (userdao)proxy.newproxyinstance(mybeanfactory.class.getclassloader(),new class[]{userdao.class},new invocationhandler(){
            public object invoke(object proxy, method method, object[] args) throws invocationtargetexception, illegalaccessexception {
                //增强前
                myaspect.mybefore();
                object obj = method.invoke(userdao,args);
                //增强后
                myaspect.myafter();
                return obj;
            }
        });

    }

 这里模拟了spring框架ioc思想
代理类主要是对创建的实例中的方法进行增强

4.测试

@test
    public void demo3(){
        
        userdao userdao = mybeanfactory.getbean();
        userdao.save();
        userdao.delete();
        userdao.find();
        userdao.update();

    }

测试结果:

5.总结:jdk动态代理模式可以减少系统间的重复代码,达到模块间的松耦合目的,让方法只关注于业务本身。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网