java 動態代理實現原理

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章