java 动态代理实现原理

来源:互联网 发布:php 菜鸟教程 编辑:程序博客网 时间:2024/05/19 19:33

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();
}
}

0 0
原创粉丝点击