动态代理入门

来源:互联网 发布:淘宝宝贝违规删除不了 编辑:程序博客网 时间:2024/06/05 22:21
public class User {private int id;private String name;private int age;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;}public int getId() {return id;}public void setId(int id) {this.id = id;}}

 

public interface UserManager {public void aadUser(User user);public void deleteById(int id);public void updateUser(User user);public User findById(int id);}

 

public class UserManagerImp implements UserManager {@Overridepublic void aadUser(User user) {System.out.println("----------addUser------------");}@Overridepublic void deleteById(int id) {System.out.println("----------deleteById------------");}@Overridepublic User findById(int id) {System.out.println("----------findById------------");return null;}@Overridepublic void updateUser(User user) {System.out.println("----------updateUser------------");}}

 

public class SecurityHandler implements InvocationHandler {private Object targetObject;/* * 下面方法是得到代理对象,如果得不到代理对象,这个效果也是没有作用的 * 最后一个参数是InvocationHandler接口,这也是为什么动态代理对象一定要实现这个接口的原因 * 得到的代理对象会执行invoke()方法 */public Object newProxy(Object targetObject){this.targetObject = targetObject;//得到代理对象的方法,这个是反射机制里面的对象方法return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),  targetObject.getClass().getInterfaces(),  this);}/* * 在代理对象之前做业务处理,然后再做对象定义的方法,因此最后要返回代理的对象 */@Overridepublic Object invoke(Object proxcy, Method method, Object[] args)throws Throwable {checkSecurity();return method.invoke(this.targetObject, args);}public void checkSecurity(){System.out.println("-----------checkSecurity()----------");}}

 

public class TestMain{public static void main(String[] args) {//产生一个安全代理的对象方法SecurityHandler handler = new SecurityHandler();//得到一个已经被代理的对象UserManager userManager = (UserManager)handler.newProxy(new UserManagerImp());User user = new User();user.setAge(23);user.setId(1);user.setName("huangbiao");//被代理对象做数据业务之前会先调用invoke()方法userManager.aadUser(user);}}

 

原创粉丝点击