码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2018-10-27 23:31:42      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:事务   面向切面   很多   关系   核心技术   了解   pre   静态代理   应用   

面向切面编程 事务 很多框架地层用到  可以重构重复代码

AOP 的地层的实现也是代理模式     了解事务需要了解代理模式   包装代理设计模式

什么是代理模式

通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现)  ,AOP核心技术面向切面编程。

技术分享图片

 

 

代理模式应用场景

SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色

代理的分类

静态代理(静态定义代理类)

动态代理(动态生成代理类)

Jdk自带动态代理

Cglib 、javaassist(字节码操作库)

静态代理

什么是静态代理

由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用之前或调用之后进行处理。既(AOP微实现),AOP核心技术面向切面编程

静态代理和动态代理   静态代理需要些代理类 动态代理不需要

 

废话不多说,上手写代码:

用静态代理,模式下事务原理   

 定义接口  

package DaiLi;

public interface IUserDao {
    public void add();
}

实现接口:

package DaiLi;

public class IUserDaoImpl implements IUserDao {
   
    @Override
    public void add() {
        System.out.println("add方法调用");    
    }

}

代理类也是根据接口去扩展的:

package DaiLi;


public class UserDaoProxy  implements IUserDao{
      //通过构造函数  传入代理对象
      private IUserDao iUserDao;
    
      public UserDaoProxy(IUserDao iUserDao) {
        this.iUserDao=iUserDao;
    }
     //在方法之前之后做拦截处理 
     @Override
    public void add() {
         System.out.println("开启事务");   
         iUserDao.add();     //通过代理 去掉用方法  
         System.out.println("提交事务");
        
    }

}

客户端使用:

package DaiLi;


public class UserDaoProxy  implements IUserDao{
      //通过构造函数  传入代理对象
      private IUserDao iUserDao;
    
      public UserDaoProxy(IUserDao iUserDao) {
        this.iUserDao=iUserDao;
    }
     //在方法之前之后做拦截处理 
     @Override
    public void add() {
         System.out.println("开启事务");   
         iUserDao.add();     //通过代理 去掉用方法  
         System.out.println("提交事务");
        
    }

}

运行结果:

技术分享图片

其实就是接口 然后实现接口  Java的多态嘛  我是这么理解的,小伙伴你们有何见解嘛

  如果业务量比较大  有很多类需要去代理   不利于扩展的  这样

静态代理需要生成代理对象!!! 如果再添加个方法,则会这样:、

技术分享图片

这样很冗余~

 

代理模式

标签:事务   面向切面   很多   关系   核心技术   了解   pre   静态代理   应用   

原文地址:https://www.cnblogs.com/toov5/p/9863793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!