java 代理机制的实例详解

发布时间 - 2026-01-11 02:56:56    点击率:

java 代理机制的实例详解

前言:

 java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件。本文主要练习下动态代理,代码用于备忘。对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了。

jdk代理

实例代码

import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
 
public class ProxyFactory implements InvocationHandler {  
    
  private Object tarjectObject;  
  
  public Object creatProxyInstance(Object obj) {  
    this.tarjectObject = obj; 
    return Proxy.newProxyInstance(this.tarjectObject.getClass()  
        .getClassLoader(), this.tarjectObject.getClass()  
        .getInterfaces(), this);  
  }  
  
  @Override  
  public Object invoke(Object proxy, Method method, Object[] args)  
      throws Throwable {  
    Object result = null;  
    if (AssessUtils.isAssess()) {  
      result = method.invoke(this.tarjectObject, args);  
    }else{ 
      throw new NoAssessException("This server cannot run this service."); 
    } 
    return result;  
  } 
} 

cglib代理

import java.lang.reflect.Method; 
import org.springframework.cglib.proxy.Enhancer; 
import org.springframework.cglib.proxy.MethodInterceptor; 
import org.springframework.cglib.proxy.MethodProxy; 
 
public class ProxyCglibFactory implements MethodInterceptor {  
    
  private Object tarjectObject;  
  
  public Object creatProxyInstance(Object obj) {  
    this.tarjectObject = obj; 
    Enhancer enhancer=new Enhancer(); 
    enhancer.setSuperclass(this.tarjectObject.getClass()); 
    enhancer.setCallback(this); 
    return enhancer.create(); 
  } 
 
  @Override 
  public Object intercept(Object obj, Method method, Object[] args, 
      MethodProxy arg3) throws Throwable { 
    Object result = null;  
    if (AssessUtils.isAssess()) {  
      result = method.invoke(this.tarjectObject, args);  
    }else{ 
      throw new NoAssessException("This server cannot run this service."); 
    } 
    return result;  
  } 
} 

Aspect注解

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 
 
@Aspect 
public class AssessInterceptor { 
  @Pointcut(value="execution (* com..*.*(..))") 
  private void anyMethod(){}; 
   
  @Before("anyMethod()") 
  public void doBefore(JoinPoint joinPoint) throws NoAssessException{ 
    if (!AssessUtils.isAssess()) {  
      throw new NoAssessException("This server cannot run this service."); 
    } 
  } 
   
  /** 
   * Around异常的时候调用 
   * @param pjp 
   * @throws Throwable 
   */ 
  @Around("anyMethod()") 
  public void invoke(ProceedingJoinPoint pjp) throws Throwable{ 
    pjp.proceed();  
  } 
 
} 

以上就是java代理机制的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 代理机制  # 代理机制的实例  # 代理机制如何实现  # 全面了解Java中的CAS机制  # 关于Java反射机制 你需要知道的事情  # Java动态代理机制的实例详解  # 浅谈用java实现事件驱动机制  # Java Proxy机制详细解读  # 很好  # 班门弄斧  # 子类  # 有很多  # 就不  # 如有  # 两种  # 希望能  # 谢谢大家  # 疑问请  # 网上  # creatProxyInstance  # obj  # return  # tarjectObject  # implements  # ProxyFactory  # Object  # private  # getClassLoader 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速完成中国万网建站详细流程?  网站制作价目表怎么做,珍爱网婚介费用多少?  js实现获取鼠标当前的位置  高端建站三要素:定制模板、企业官网与响应式设计优化  JavaScript如何实现类型判断_typeof和instanceof有什么区别  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在新浪SAE免费搭建个人博客?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Windows Hello人脸识别突然无法使用  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  微信推文制作网站有哪些,怎么做微信推文,急?  如何在局域网内绑定自建网站域名?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何快速生成橙子建站落地页链接?  香港服务器租用费用高吗?如何避免常见误区?  如何在万网开始建站?分步指南解析  Python文件流缓冲机制_IO性能解析【教程】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  在线制作视频的网站有哪些,电脑如何制作视频短片?  用yum安装MySQLdb模块的步骤方法  jQuery validate插件功能与用法详解  音乐网站服务器如何优化API响应速度?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在IIS服务器上快速部署高效网站?  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel怎么在Blade中安全地输出原始HTML内容  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何获取上海专业网站定制建站电话?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何快速选择适合个人网站的云服务器配置?  Laravel如何处理异常和错误?(Handler示例)  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何确保FTP站点访问权限与数据传输安全?  如何在橙子建站中快速调整背景颜色?