jdk动态代理

博客介绍了JDK动态代理相关知识,它采用反射技术实现,前提是被代理对象须实现一个或多个接口,还需实现InvocationHandler接口和invoke()方法,并给出了接口userDao的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdk动态代理就是采用反射技术实现的

jdk动态代理前提条件是:被代理对象必须实现一个或者多个接口

jdk动态代理需要实现InvocationHandler接口和invoke()方法

例如:

接口userDao

public interface userDao {
public void addUser();
public void deleteUser();
}

接口实现类UserDaoImp
public class UserDaoImp implements userDao {
@Override
public void addUser() {
System.out.println("添加用户");
}

@Override
public void deleteUser() {
System.out.println("删除用户");

}
}
切面类Myaspect
//切面类,用于增强
public class Myaspect {
public void addBefore(){
System.out.println("添加之前的检查");
}
public void deleteBefore(){
System.out.println("删除之前的检查");
}

}

jdkProxy代理类
public class jdkProxy implements InvocationHandler {

//jdk动态代理的:要先建立代理对象和被代理对象的关系,然后实现代理逻辑
//动态代理必须实现一个或多个接口
private userDao userDao1;//目标对象也就是真实对象
    public Object creatProxy(userDao userDao1) {
this.userDao1 = userDao1;
return Proxy.newProxyInstance(jdkProxy.class.getClassLoader(), userDao1.getClass().getInterfaces(), this);
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//增强方法
Myaspect myaspect = new Myaspect();
myaspect.addBefore();
Object obj = method.invoke(userDao1, args);//实现调用目标方法
myaspect.deleteBefore();
return obj;
}
}
测试jdk代理
public class jdkProxyTest {
public static void main(String[] args) {
jdkProxy jdk = new jdkProxy();
// userDao userDao1 = new UserDaoImp();
userDao userDao2 = (userDao) jdk.creatProxy(new UserDaoImp());
userDao2.addUser();

}
}

结果:

添加之前的检查
添加用户
删除之前的检查

转载于:https://www.cnblogs.com/jasonboren/p/10565328.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值