动态代理实现

来源:互联网 发布:2017淘宝可以买彩票吗 编辑:程序博客网 时间:2024/06/05 14:16


接口类

package com.bjpowernode.spring;public interface UserManager {public void addUser(String username,String password);public void delUser(String userId);public String findUserById(int userID);public void modifyUser(int userId,String username,String password);}


实现类

package com.bjpowernode.spring;public class UserManagerImpl implements UserManager {@Overridepublic void addUser(String username, String password) {System.out.println("addUser");}@Overridepublic void delUser(String userId) {System.out.println("delUser");}@Overridepublic String findUserById(int userID) {System.out.println("findUserById");return "张三";}@Overridepublic void modifyUser(int userId, String username, String password) {System.out.println("modifyUser");}//private void checkSecurity(){//System.out.println("checkSecurity");//}}


代理类

package com.bjpowernode.spring;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class SecurityHandler implements InvocationHandler {private Object targetObject;public Object createProxyInstance(Object targetObject){this.targetObject = targetObject;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);};@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {checkSecurity();//调用目标方法 Object ret = method.invoke(targetObject, args);return ret;}private void checkSecurity() {System.out.println("checkSecurity");}}


客户端

package com.bjpowernode.spring;public class Client {public static void main(String[] args) {SecurityHandler hander = new SecurityHandler();UserManager useraManager = (UserManager) hander.createProxyInstance(new UserManagerImpl());useraManager.addUser("张三","123");}}




————————————————————————大道至简————————————————————————

————————————————————————chenchen———————————————————————

1 0
原创粉丝点击