- ——————————————–申明一个接口 这个是非常重要的—————————————
- public interface IUser {
- public void addUser(UserBean user);
- public String findUserById(int stuId);
- }
–
——————————————写个类实现这个接口———————————————————–
- public class UserImpl implements IUser {
- public void addUser(UserBean user) {
- System.out.println(“———–add User————“);
- }
- public String findUserById(int stuId) {
- System.out.println(“———–find User————“);
- return “Jeson”;
- }
- }
—————————————————————————————————————————————
下面我要在增和查的方法执行前做权限验证(securityCheck)
但是传统的写法是在调用的方法前写上这个方法 但是每个方法都写 不管是在开发期间还是维护期间都很麻烦
那我们完全可以写个动态代理 为我们的方法实现类创建动态代理 这样无需我们关注一些公共的代码 比如 权限验证啊 日志写入之类的 我们只要关注我们自己的逻辑代码就行了
具体实现如下
——————————————————创建动态代理———————————————————-
- public class SecurityHandler implements InvocationHandler{
- /*
- InvocationHandler 是代理实例的调用处理程序 实现的接口。
- 每个代码实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。 */
- private Object objectTarget;
- public Object getNewObjectProxy(Object objectTarget) //取得代理类
- {
- this.objectTarget =objectTarget;
- return Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),objectTarget.getClass().getInterfaces(),this);
- /*
- Proxy
- 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
- newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
- 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
- */
- }
- public Object invoke(Object object, Method method, Object[] objs) throws Throwable {
- checkSecurity();
- Object ret = null; //方法调用后的返回值接受变量
- try
- {
- ret = method.invoke(objectTarget, objs);
- }catch(Exception e)
- {
- e.printStackTrace();
- }
- return ret;
- }
- public void checkSecurity()
- {
- System.out.println(“———-security checking—————“);
- }
- }
——————————————————-测试———————————————————-
- public class DynamicProxy {
- /**
- * @param args
- */
- public static void main(String[] args) {
- UserBean ub = new UserBean();
- SecurityHandler handler = new SecurityHandler();
- IUser user = (IUser)handler.getNewObjectProxy(new UserImpl());
- user.findUserById(11);
- }
- }
———————————————————–输出————————————————-
———-security checking—————
———–find User————