java 动态代理实现原理

本文介绍了一个具体的Java代理模式实现案例,包括UserService接口定义、UserServiceImpl实现类以及LogInterceptor日志拦截器的具体实现。通过Proxy.newProxyInstance方法为UserServiceImpl创建了代理对象,并演示了如何在调用方法前后记录日志。

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

1,UserService 

public interface UserService {
public void save();
public void delete();

}

2,UserServiceImpl 

public class UserServeceImpl implements UserService {



public void save() {
System.out.println("save user");
}


public void delete() {
System.out.println("delete user");

}


}

3,LogInterceptor 


/**
 * 
 * @author dwj
 * 2015-7-26   下午06:43:34
 */
public class LogInterceptor implements InvocationHandler{
private Object target;//被代理对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:MM:ss SSS");
public void addLog(){
System.out.println("执行时间:"+sdf.format(new Date()));
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
addLog();
method.invoke(target, args);//target 被代理的对象来调用, args是参数
return null;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}


}

4,ProxcyTest 

public class ProxcyTest {
public static void main(String[] args){
//给哪个对象创建代理
UserService userService=new UserServeceImpl();
LogInterceptor log=new LogInterceptor();
log.setTarget(userService);
UserService  userServiceProxy=(UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), new Class[]{UserService.class}, log);
userServiceProxy.save();
userServiceProxy.delete();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值