• [原]spring学习笔记8.1静态代理基础


    本来已经转贴了.想一想,自己还是再做个笔记吧.印象更深. 好 .....那么 继续

    在写好的类中.添加新的功能.一般是怎么做的呢?
    1.静态代理
      参考代码static-proxy
    1)首先写个接口吧

     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}
    2)接口类的实现
     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()");
    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}
    比如添加checksafe()方法. 要在每个实现方法中调用checksafe(); (把代码中注释去掉后的效果)
    这样做,有人会不满.不希望在实现类中出现其他7788的东西.
    那么注释就别去了...加个代理吧.
    3)代理类
     1package com.zyl.proxy;
     2
     3public class UserManagerImplProxy implements UserManager {
     4    //通过构造方法
     5    private UserManager usermanager;
     6    public UserManagerImplProxy(UserManager usermanager){
     7        this.usermanager=usermanager;
     8    }

     9    public void addUer(String name, String password) {
    10        checksafe();
    11        usermanager.addUer(name, password);
    12        
    13
    14    }

    15
    16
    17    public void delUser(String id) {
    18        checksafe();
    19        usermanager.delUser(id);
    20    }

    21
    22
    23    public void modifyUser(int id, String name, String password) {
    24        checksafe();
    25        usermanager.modifyUser(id, name, password);
    26
    27    }

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

    31//代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码
    32//静态代理不适用大量类需要添加功能的项目
    33}

    34
    //代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码;
    //静态代理不适用大量类需要添加功能的项目;
    //    第3行: 可以看到,代理类UserManagerImplProxy也是实现接口UserManager;
    //    第6行:定义构造方法,传入UserManager类型的实例.实现接口的方法(addUser等);
    //    在方法中加入安全检查新的方法checksafe()或者日志等7788的方法.
    其实大同小异,在代理类中的方法,照样还是要加入添加的方法checksafe();
    4)实现client
     1package com.zyl.ooxx;
     2
     3import com.zyl.proxy.UserManager;
     4import com.zyl.proxy.UserManagerImpl;
     5import com.zyl.proxy.UserManagerImplProxy;
     6
     7public class client {
     8
     9    public static void main(String[] args) {
    10        UserManager usermanager =new UserManagerImpl();
    11        //采用代理之后
    12        UserManagerImplProxy usermanagerimplproxy=new UserManagerImplProxy(usermanager);
    13        
    14       // usermanager.addUer("帅哥", "11");
    15        usermanagerimplproxy.addUer("帅哥2""password");
    16    }

    17
    18}

    19
    打印结果如下:
    1检查安全性的方法
    2UserManagerImpl.addUser()
    ok 静态代理就这样.
  • 相关阅读:
    恶意代码检测--已看梳理
    tips
    十大排序
    python使用记录
    Matlab用figure;subplot后合并子图
    利用python的docx模块处理word和WPS的docx格式文件
    论文笔记(FCN网络,语义分割):Fully Convolutional Networks for Semantic Segmentation
    论文笔记:SoundNet: Learning Sound Representations from Unlabeled Video
    Winner-Take-All Autoencoders ( 赢者通吃自编码器)
    机器学习优化过程中的各种梯度下降方法(SGD,AdaGrad,RMSprop,AdaDelta,Adam,Momentum,Nesterov)
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562429.html
Copyright © 2020-2023  润新知