package com.iteedu.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 newProxy(Object targetObject) { this.targetObject = targetObject; return Proxy.newProxyInstance( targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { checkSecurity(); Object ret = null; try { ret = method.invoke(this.targetObject, args); }catch(Exception e) { e.printStackTrace(); throw new java.lang.RuntimeException(e); } return ret; } private void checkSecurity() { System.out.println("----------checkSecurity()---------------"); } }
为被代理对象方法前加checkSecurity()功能。
接口
package com.iteedu.spring; public interface IUserManager { public void addUser(String username, String password); public void deleteUser(int id); public void modifyUser(int id, String username, String password); public String findUserById(int id); }
实现
package com.iteedu.spring; public class UserManagerImpl implements IUserManager { public void addUser(String username, String password) { System.out.println("-------addUser()----------"); } public void deleteUser(int id) { System.out.println("-------deleteUser()----------"); } public String findUserById(int id) { System.out.println("-------findUserById()----------"); return null; } public void modifyUser(int id, String username, String password) { System.out.println("-------modifyUser()----------"); } }
SecurityHandler handler = new SecurityHandler(); IUserManager userManager = (IUserManager)handler.newProxy(new UserManagerImpl()); userManager.addUser("张三", "123");