zoukankan      html  css  js  c++  java
  • 设计模式--->静态代理模式

    1.代理模式

    Spring的AOP就是典型的代理模式实现的,代理模式常用于外围,不影响主业务的一种实现(如日志,事物,日志检测等)

     1.什么是代理模式
      通过代理为原始类增加额外功能
      好处:有利于目标类的维护,增强的更能是可插拔的。

    2.名词解释
    目标类:如UserServiceImpl
    目标方法: login(String username,String password)
    额外功能:日志、性能检测、统一异常处理

    3.代理类和原始类的关系。
    均实现同一个接口,对目标类进行增强。

    4.具体代码如下
    接口:UserService.java

    public interface UserService {
        public void login(String username,String password);
    }

    目标类:OrderServiceImpl.java

    package proxy.service.impl;
    
    import proxy.service.UserService;
    
    public class UserServiceImpl implements UserService {
    
        @Override
        public void login(String username, String password) {
            System.out.println("UserServiceImpl.login 我是【service核心】");
        }
    }

    代理类:OrderServiceImplProxy

    package proxy.service.impl;
    
    public class UserServiceImplProxy implements UserService {
    
    //    需要对目标方法进行增强就需要先拿到目标类
        UserService userService = new UserServiceImpl();
    
        @Override
        public void login(String username, String password) {
            System.out.println("UserServiceImplProxy.login 【service外围】");
            userService.login(username,password);
        }
    }

    测试

    @Test public void test1() {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext5.xml");
    UserService userService = (UserService)ctx.getBean("userService");
    userService.login("zhangsan","111111");
    }

     注意这里在applicationContext5.xml的文件中需要注入代理类;

    总结

    1. 静态代理有哪些优势:
    • 可以对原有方法进行加强。
    1. 静态代理有哪些劣势:
    • 类会增多一倍,会给类的管理带来难度
    • 类中的冗余代码多,比如目标方法的前置增强逻辑和后置增强逻辑均需要在每一个代理类中写一次。
      1. 有没有更为高明的办法呢?
        有的,可以使用spring的动态代理。
  • 相关阅读:
    委托
    SQL Server 2012 学习笔记5
    SQL Server 2012 学习笔记4
    SQL Server 2012 学习笔记3 增查改删
    SQL Server 2012 学习笔记2
    SQL Server 2012 学习笔记1
    PCD文件去除曲率的脚本
    pcl曲面网格模型的三种显示方式
    pcl计算样点法向并显示
    Markdown的使用---现学现用
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/14197610.html
Copyright © 2011-2022 走看看