java动态代理

来源:互联网 发布:镜花缘传奇知乎 编辑:程序博客网 时间:2024/06/05 04:22
 

User.java

public class User {private String name;private int age;private int id;@Overridepublic String toString() {return "{"+name+" , "+age+" , "+id+"}";}public User(String name, int age, int id) {super();this.name = name;this.age = age;this.id = id;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}


 

UserManager.java

public interface UserManager {public void addUser(User user);public void delUser(User user);public void queryUserByID(int id);}


UserManagerImpl.java

public class UserManagerImpl implements UserManager {@Overridepublic void addUser(User user) {System.out.println("UserManagerImpl.addUser--->>name="+user.getName());}@Overridepublic void delUser(User user) {System.out.println("UserManagerImpl.delUser--->>name="+user.getName());}@Overridepublic void queryUserByID(int id) {System.out.println("UserManagerImpl.id--->>id="+id);}}


ProxyTest.java

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyTest implements InvocationHandler {Object target;public Object proxyObject(Object target) {this.target = target;return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object ret = null;System.out.println(method.getName());for(int i=0;i<args.length;i++){System.out.println(args[i]);}//执行方法并返回方法的返回值没有则返回nullret = method.invoke(target, args);return ret;}}

 

Client.java

public class Client {public static void main(String[] args) {User user = new User("小明", 22, 1);UserManager userManager = (UserManager) new ProxyTest().proxyObject(new UserManagerImpl());userManager.delUser(user);}}


执行结果:

delUser
{小明 , 22 , 1}
UserManagerImpl.delUser--->>name=小明