AOP(jDK动态代理)

1.使用JDK动态代理,使用Proxy类里面的方法

(1)调用newProxyInstance方法

方法由三个参数

(1)第一个参数,类加载器

(2)第二个参数,被代理类实现的接口(数组形式可以多个)

(3)第三个参数,实现这个接口InvocationHandler,创建代理对象,写增强方法。

2.JDK动态代理方法

(1)创建接口,定义方法

public interface UserDao {
    public int add(int a,int b);

    public String update(String id);
}

(2)创建接口实现类,实现方法

public class UserDaoImpl implements UserDao {
    @Override
    public int add(int a, int b) {
        return a+b;
    }

    @Override
    public String update(String id) {
        return id;
    }
}

(3)使用Proxy类创建接口代理对象

public class JDKProxy {
    public static void main(String[] args) {
//        创建接口的代理对象
        Class[] interfaces = {UserDao.class};
        //匿名内部类
//        Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new InvocationHandler() {
//            @Override
//            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//                return null;
//            }
//        });


        UserDaoImpl userDao =new UserDaoImpl();
        UserDao dao = (UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),interfaces,new UserDaoProxy(userDao));
        int res = dao.add(1,2);
        System.out.println(res);
    }
}


//创建代理对象代码
class  UserDaoProxy implements InvocationHandler{
//    1.把创建的是谁的代理对象,把谁传递过来
//    有参数构造传递
    private Object obj;
    public UserDaoProxy(Object object){
        this.obj = object;
    }
    //增加的逻辑
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        方法之前做个处理
        System.out.println("方法之前执行。。。。"+method.getName()+":传递的参数"+Arrays.toString(args)+args[0]);
//        被增强的方法执行
        Object res = method.invoke(obj,args);

//        方法之后做个处理
        System.out.println("在方法之后执行");
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值