当前位置: 首页 > wzjs >正文

开办网站需要什么手续网站关键词在线优化

开办网站需要什么手续,网站关键词在线优化,上海疫情最新通告,网站建设常用的工具一、Arthas监听代理对象的核心原理 动态代理与字节码增强 Spring的AOP代理(JDK动态代理或CGLIB)会生成新类: JDK代理:基于接口,生成$ProxyX类(如$Proxy43)[2]。CGLIB代理:通过继承目…

一、Arthas监听代理对象的核心原理

  1. 动态代理与字节码增强
    Spring的AOP代理(JDK动态代理或CGLIB)会生成新类:

    • JDK代理:基于接口,生成$ProxyX类(如$Proxy43)[2]。
    • CGLIB代理:通过继承目标类生成子类(如TargetClass$$EnhancerBySpringCGLIB$$xxxx),嵌入拦截器链(如DynamicAdvisedInterceptor)[3][5]。
    • Arthas通过反编译这些类,可视化增强逻辑(如事务拦截器TransactionInterceptor)。
  2. 关键机制

    • 代理对象持有原始对象的引用(通过TargetSource获取)[2][8]。
    • 调用代理方法时,实际执行的是拦截器链(Advisor链)[12]。

二、Arthas操作步骤
步骤1:定位代理类

查找被代理的类(示例:UserService)
sc *UserService输出示例:
com.example.UserService$$EnhancerBySpringCGLIB$$123abc 
  • 若结果为$ProxyX(JDK代理)或$$EnhancerBySpringCGLIB$$(CGLIB代理),说明是代理类[1][3]。

步骤2:反编译代理类字节码

反编译CGLIB代理类 
jad com.example.UserService$$EnhancerBySpringCGLIB$$123abc 
  • 查看反编译代码中的方法拦截逻辑(如intercept()方法中的MethodInterceptor调用链)[3][7]。

步骤3:获取原始目标对象

获取代理对象实例的ID(需先执行调用触发类加载)
vmtool --action getInstances --className com.example.UserService$$EnhancerBySpringCGLIB$$123abc 通过OGNL获取原始对象(假设实例ID为@12345)
ognl '@com.example.UserService@12345.target.targetSource.target'
  • 原理:
    Spring代理对象实现了Advised接口,其TargetSource持有原始Bean[2][8]。

步骤4:监听方法调用

监听代理类的指定方法(如save方法)
watch com.example.UserService$$EnhancerBySpringCGLIB$$123abc save '{params, target, returnObj}' -x 3 
  • 参数说明:
    params(方法入参)、target(代理对象本身)、returnObj(返回值)[1][6]。

三、常见问题解决

  1. 事务失效(自调用问题)

    • 现象:Service内部方法A调用方法B,B的事务不生效。
    • 原因:自调用不走代理,因此未触发拦截器链。
    • 解决:
      // 在方法A中获取当前代理对象调用B 
      UserService proxy = (UserService) AopContext.currentProxy();
      proxy.methodB();
      
      需在启动类加@EnableAspectJAutoProxy(exposeProxy = true)[11]。
  2. Private方法代理异常

    • CGLIB无法代理private/final方法,调用时会直接执行原始方法(无增强逻辑),若方法依赖Spring注入的Bean,会因未初始化导致NPE[9]。
  3. 动态切换数据源失效

    • 若通过@Transactional注解管理事务,事务代理会优先于数据源切换执行,导致切换失效。需调整AOP顺序或手动管理事务[4]。

四、最佳实践

  • 优先使用CGLIB代理:
    在Spring Boot中配置spring.aop.proxy-target-class=true,避免JDK代理的接口限制。
  • 结合Spring工具类验证:
    使用AopUtils.isCglibProxy(obj)AopTestUtils.getTargetObject(obj)辅助调试[8]。
  • 日志增强:
    对代理类方法添加trace命令,实时追踪调用栈:
    trace com.example.UserService$$EnhancerBySpringCGLIB$$123abc save 
    

生产环境建议通过ognl检查AdvisedSupport中的拦截器链,确认事务、日志等切面是否生效。


附录:Arthas命令速查

命令用途示例
sc查找类sc *Service
jad反编译类jad com.example.UserService
ognl执行表达式获取对象ognl '@springBean'
watch监听方法调用watch *Service * '{params}'
vmtool获取JVM实例vmtool -x 3 --action getInstances -c ClassName
http://www.dtcms.com/wzjs/60632.html

相关文章:

  • 做网站的公司排行班级优化大师网页版登录
  • 学敏网站建设宁德市住房和城乡建设局
  • 广州云建站模板爱战网官网
  • 什么公司做网站最好服务网站排名咨询
  • 网站建设销售兼职合同百度免费下载安装
  • wamp做网站seo需要掌握什么技能
  • 丰台网站关键词优化精准信息300099
  • 西宁市住房和城乡建设局网站免费的网络推广渠道有哪些
  • 万网如何上传静态网站网络营销的推广
  • 纯静态网站 后台苏州seo快速优化
  • 服装设计网页搜索引擎优化是指什么意思
  • 福步外贸人才网seo网络推广员招聘
  • 网站设计规划书郑州专业网站建设公司
  • ip在线代理网页南宁seo主管
  • 网站管理一般要做什么外链seo招聘
  • 专注武汉手机网站设计seo试用软件
  • 一个人做运营网站深圳网站建设专业乐云seo
  • 广东东莞今日疫情北京seo执行
  • 汉中定制网站建设公司高州新闻 头条 今天
  • 撸撸撸做最好的导航网站深圳网站seo优化
  • 黑龙江最新疫情最新公告武汉seo网站优化排名
  • 双流区规划局建设局网站怎么制作自己的网站
  • 新浪网站首页seo兼职怎么收费
  • 专做进口批发的网站公司网站建设要多少钱
  • 非自己的网站如何做二次跳转营销软件商城
  • 网站能否做二维码网络营销外包顾问
  • 廊坊专业网站制作服务seo的工作内容主要包括
  • 找人做网站骗局全国人大常委会副委员长
  • 运营的网站高报师培训机构排名
  • 虚拟网站怎么做的网络营销策略分析案例