zoukankan      html  css  js  c++  java
  • [原]spring学习笔记8.2动态代理基础

    [学习资料来自尚学堂公布之视频]
    [前面已经转了几篇有关静态/动态代理的帖子.写的都很不错.自己也跟着视频敲了几篇代码.
    现在贴出来.算是有有始有终吧.]
    1.UserManager接口
     1package com.zyl.proxy;
     2
     3public interface UserManager {
     4    
     5    public void addUer(String name,String password);
     6    
     7    public void delUser(String id);
     8    
     9    public void modifyUser(int id, String name, String password);
    10    
    11}

    12
    2.实现接口的UserManagerImpl类
     1package com.zyl.proxy;
     2
     3public class UserManagerImpl implements UserManager {
     4
     5
     6    public void addUer(String name, String password) {
     7       //添加日志/安全性检查
     8        //checksafe();
     9        //采用添加代理类的方法会如何?
    10        System.out.println("UserManagerImpl.addUser()123");
    11
    12    }

    13
    14    @Override
    15    public void delUser(String id) {
    16        //添加日志/安全性检查
    17        //checksafe();
    18           System.out.println("UserManagerImpl.delUser()");
    19    }

    20
    21    @Override
    22    public void modifyUser(int id, String name, String password) {
    23        //添加日志/安全性检查
    24        //checksafe();
    25           System.out.println("UserManagerImpl.modifyUser()");
    26
    27    }

    28//    private void checksafe(){
    29//        System.out.println("检查安全性的方法");
    30//    }
    31}

    32
    注释的地方不用理会
    3.动态代理的类safeHandler
     1package com.zyl.proxy;
     2
     3import java.lang.reflect.InvocationHandler;
     4import java.lang.reflect.Method;
     5import java.lang.reflect.Proxy;
     6
     7public class safeHandler implements InvocationHandler //实现InvocationHandler接口
     8    
     9    private Object targetObj;
    10    public Object newProxy(Object targetObj){
    11        this.targetObj=targetObj;
    12        //生成动态代理::
    13        //对象的接口等ooxx
    14        return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),targetObj.getClass().getInterfaces(),
    15                this);//targetObj.getClass().getInterfaces()的传入,所以只要实现了接口的类都会被动态代理
    16        
    17    }

    18    public Object invoke(Object proxy, Method method, Object[] args)//args是传递过来的参数,比如name为张三
    19            throws Throwable 
    20        //调用任何方法前都会前调用invoke方法,所以我们在invoke方法前放置需要调用的代码 如安全性检查/log日志等等添加的方法
    21        //这里还可以加入一些逻辑判断,是否加入安全性检查
    22        checksafe();
    23         System.out.println("方法名是"+method.getName());
    24         for(int i=0;i<args.length;i++){
    25             System.out.println("哈哈"+args[i]);
    26         }

    27         //临时添加方法调用结束
    28         //以下调用一般的方法
    29        Object result=null;
    30        
    31        try{
    32            method.invoke(targetObj,args); //真正的调用对象的实现的方法(非添加的那些方法)
    33        }
    catch(Exception e){
    34            e.printStackTrace();
    35        }

    36        return result; //invoke方法需要返回一个对象.所以前面定义了一个Object result=null; 这里返回result
    37    }

    38    //将要加入的安全性检查等等类似的方法放在此类中
    39    private void checksafe(){
    40        System.out.println("检查安全性的方法");
    41    }

    42
    43}

    44
    4.client端:
     1package com.zyl.ooxx;
     2
     3import com.zyl.proxy.UserManager;
     4import com.zyl.proxy.UserManagerImpl;
     5import com.zyl.proxy.safeHandler;
     6
     7
     8public class client {
     9
    10    public static void main(String[] args) {
    11        safeHandler handler=new safeHandler();//建立代理类的实例
    12        UserManager usermanager=(UserManager)handler.newProxy(new UserManagerImpl());//传入代理对象转成原接口类型
    13        usermanager.addUer("实际是调用代理的方法""2222");//调用代理中的东西,然后再调用代理对象的ooxx
    14       
    15    }

    16
    17}

    18
    就到这里吧.学习spring aop的基础差不多打好了
  • 相关阅读:
    Drozer渗透测试工具(使用篇)
    Teamcenter中TCComponentItem与TCComponentBOMLine的创建
    Swing中分割面板JSplitPane的使用
    Swing中菜单栏JToolBar的使用
    Javaweb项目导出成jar包并使用Windows定时任务定时执行
    TCSOA获取BOMLine
    SQLite Expert安装与注册
    获取分类节点
    处理TC的Command问题
    通过TCComponentBomLine获取ItemRevision的两种情况
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562425.html
Copyright © 2011-2022 走看看