大型网站建设视频软件下载平台哪个好
2026/3/21 14:09:44 网站建设 项目流程
大型网站建设视频,软件下载平台哪个好,Soho外贸常用网站,怎么创建一个论坛应用场景 APM#xff1a;应用性能监控。如 SkyWalking、OpenTelemetry 等通过 Agent 插桩收集调用链、耗时等代码覆盖率工具#xff1a;如 JaCoCo 在测试时注入探针统计覆盖情况热部署 / 热更新#xff1a;如 JRebel 利用 Agent 修改类定义实现无需重启生效安全审计 / 日志…应用场景APM应用性能监控。如 SkyWalking、OpenTelemetry 等通过 Agent 插桩收集调用链、耗时等代码覆盖率工具如 JaCoCo 在测试时注入探针统计覆盖情况热部署 / 热更新如 JRebel 利用 Agent 修改类定义实现无需重启生效安全审计 / 日志增强自动为敏感方法添加日志或权限检查故障注入 / 混沌工程动态修改行为模拟异常静态加载示例时机在目标程序的 main() 入口方法之前执行加载方式通过添加 JVM 参数【-javaagent:Agent-Jar包全路径参数】 来加载参数的格式一般使用【key1value1,keyNvalueN】类加载状态所有应用类都尚未加载Agent 有完全的控制权能力可以执行任意字节码转换包括添加字段、方法等重启要求需要重启 JVM代码与运行示例Agent模块依赖坐标dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy/artifactId version1.17.8/version /dependency dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy-agent/artifactId version1.17.8/version /dependencyAgent模块pom.xml 插件配置build plugins !-- Java Agent插件 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.6.1/version executions execution !-- 插件在打包时才执行 -- phasepackage/phase !-- 插件执行时执行maven-shade-plugin的shade操作 -- goals goalshade/goal /goals configuration !-- 不生成精简pom文件保持完整的依赖树 -- createDependencyReducedPomfalse/createDependencyReducedPom transformers !-- 生成jar包时添加Agent需要的MANIFEST.MF条目 -- transformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer !-- 入口配置 -- manifestEntries !-- 静态加载Agent的入口类 -- Premain-Classwxw.mengyuan.DemoAgent/Premain-Class !-- 动态加载Agent的入口类 -- Agent-Classwxw.mengyuan.DemoAgent/Agent-Class !-- 允许重转换已加载类 -- Can-Retransform-Classestrue/Can-Retransform-Classes !-- 允许重新定义类结构 -- Can-Redefine-Classestrue/Can-Redefine-Classes !-- 设置native方法前缀 -- Can-Set-Native-Method-Prefixfalse/Can-Set-Native-Method-Prefix /manifestEntries /transformer !-- 合并所有依赖中 META-INF/services 目录下的文件 -- transformer implementationorg.apache.maven.plugins.shade.resource.ServicesResourceTransformer/ /transformers !-- 排除数字签名文件 -- filters filter artifact*:*/artifact excludes excludeMETA-INF/*.SF/exclude excludeMETA-INF/*.DSA/exclude excludeMETA-INF/*.RSA/exclude /excludes /filter /filters !-- 重命名依赖避免冲突 -- relocations relocation patterncom.google/pattern shadedPatterncom.yourcompany.shaded.google/shadedPattern /relocation relocation patternorg.apache/pattern shadedPatterncom.yourcompany.shaded.apache/shadedPattern /relocation /relocations /configuration /execution /executions /plugin /plugins /buildAgent模块方法拦截处理器package wxw.mengyuan; import net.bytebuddy.implementation.bind.annotation.*; import java.lang.reflect.Method; import java.util.concurrent.Callable; public class AgentInterceptor { RuntimeType public static Object intercept(Origin Method method, SuperCall Callable? callable) throws Throwable { long start System.currentTimeMillis(); try { return callable.call(); } finally { System.out.println(方法【 method.getDeclaringClass().getName() . method.getName() 】执行耗时 (System.currentTimeMillis() - start) ms); } } }Agent模块入口类package wxw.mengyuan; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.MethodDelegation; import net.bytebuddy.matcher.ElementMatchers; import net.bytebuddy.utility.JavaModule; import java.lang.instrument.Instrumentation; import java.security.ProtectionDomain; public class DemoAgent { /** * JVM启动时加载 * param agentArgs 参数 * param inst 该对象可以操作一些类里面的方法 */ public static void premain(String agentArgs, Instrumentation inst) { System.out.println(静态加载当前方法执行在main入口方法之前); System.out.println(参数 agentArgs); // 创建转换器 AgentBuilder.Transformer transformer new AgentBuilder.Transformer() { Override public DynamicType.Builder? transform(DynamicType.Builder? builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, ProtectionDomain protectionDomain) { return builder // 拦截哪些方法 // 仅此仅拦截 public 修饰符的方法 .method(ElementMatchers.isPublic()) // 声明拦截器 // 使用哪个类处理拦截逻辑 .intercept(MethodDelegation.to(AgentInterceptor.class)); } }; // 开始构建 new AgentBuilder.Default() // 拦截哪些类 // 此处仅拦截自身项目下、带有注解 Controller、RestController 的类 .type(ElementMatchers.nameStartsWith(wxw.mengyuan).and( ElementMatchers.isAnnotatedWith(ElementMatchers.named(org.springframework.web.bind.annotation.RestController)) .or(ElementMatchers.isAnnotatedWith(ElementMatchers.named(org.springframework.stereotype.Controller))) )) // 设置转换器 .transform(transformer) // 开始安装 .installOn(inst); System.out.println(静态加载加载完成); } /** * JVM运行时动态加载 * param agentArgs 参数 * param inst 该对象可以操作一些类里面的方法 */ public static void agentmain(String agentArgs, Instrumentation inst) { System.out.println(JVM运行时动态加载); } }Spring MVC应用Controller类package wxw.mengyuan.banner; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; RestController RequestMapping(/demo) public class DemoController { /** * 此方法会被拦截增强 */ PostConstruct public void init() { System.out.println(Controller初始化完毕); } /** * 此方法会被拦截增强 */ RequestMapping(demoTest) public String demoTest() { print(); return 娃哈哈~; } /** * 私有方法此方法不会被拦截增强 */ private void print() { System.out.println(进入了Controller方法); } }Spring MVC应用JVM参数-javaagent:D:\Projects\DEMO\Demo-Agent\target\demo-agent-1.0.0.jarkey1value1Spring MVC应用启动日志Spring MVC应用接口调用日志动态加载示例时机在目标程序运行时动态附加加载方式通过 Attach API 加载类加载状态大部分应用类已加载转换受限能力只能进行受限的字节码转换重启要求不需要重启 JVM代码与运行示例Agent模块依赖坐标dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy/artifactId version1.17.8/version /dependency dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy-agent/artifactId version1.17.8/version /dependencyAgent模块pom.xml 插件配置build plugins !-- Java Agent插件 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.6.1/version executions execution !-- 插件在打包时才执行 -- phasepackage/phase !-- 插件执行时执行maven-shade-plugin的shade操作 -- goals goalshade/goal /goals configuration !-- 不生成精简pom文件保持完整的依赖树 -- createDependencyReducedPomfalse/createDependencyReducedPom transformers !-- 生成jar包时添加Agent需要的MANIFEST.MF条目 -- transformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer !-- 入口配置 -- manifestEntries !-- 静态加载Agent的入口类 -- Premain-Classwxw.mengyuan.DemoAgent/Premain-Class !-- 动态加载Agent的入口类 -- Agent-Classwxw.mengyuan.DemoAgent/Agent-Class !-- 允许重转换已加载类 -- Can-Retransform-Classestrue/Can-Retransform-Classes !-- 允许重新定义类结构 -- Can-Redefine-Classestrue/Can-Redefine-Classes !-- 设置native方法前缀 -- Can-Set-Native-Method-Prefixfalse/Can-Set-Native-Method-Prefix /manifestEntries /transformer !-- 合并所有依赖中 META-INF/services 目录下的文件 -- transformer implementationorg.apache.maven.plugins.shade.resource.ServicesResourceTransformer/ /transformers !-- 排除数字签名文件 -- filters filter artifact*:*/artifact excludes excludeMETA-INF/*.SF/exclude excludeMETA-INF/*.DSA/exclude excludeMETA-INF/*.RSA/exclude /excludes /filter /filters !-- 重命名依赖避免冲突 -- relocations relocation patterncom.google/pattern shadedPatterncom.yourcompany.shaded.google/shadedPattern /relocation relocation patternorg.apache/pattern shadedPatterncom.yourcompany.shaded.apache/shadedPattern /relocation /relocations /configuration /execution /executions /plugin /plugins /buildAgent模块构造方法拦截处理器package wxw.mengyuan; import net.bytebuddy.asm.Advice; import java.lang.reflect.Constructor; public class ConstructorAdvice { /** * 进入构造方法时调用 * param constructor 构造方法 * return 传给 Advice.OnMethodExit 标注方法中的数据 */ Advice.OnMethodEnter static long enter(Advice.Origin Constructor? constructor) { System.out.println(进入构造方法: constructor.getDeclaringClass().getName()); return System.currentTimeMillis(); } /** * 退出构造方法时调用 * param constructor 构造方法 * param start Advice.OnMethodEnter 标注方法的返回值 */ Advice.OnMethodExit static void exit(Advice.Origin Constructor? constructor, Advice.Enter long start) { System.out.println(构造方法【 constructor.getDeclaringClass().getName() 】执行耗时 (System.currentTimeMillis() - start) ms); } }Agent模块非构造方法拦截处理器package wxw.mengyuan; import net.bytebuddy.asm.Advice; import net.bytebuddy.implementation.bytecode.assign.Assigner; import java.lang.reflect.Method; public class NotConstructorAdvice { /** * 进入方法时调用 * param method 方法 * return 传给 Advice.OnMethodExit 标注方法中的数据 */ Advice.OnMethodEnter static long enter(Advice.Origin Method method) { System.out.println(进入方法: method.getDeclaringClass().getName() . method.getName()); return System.currentTimeMillis(); } /** * 退出方法时调用 * param method 方法 * param start Advice.OnMethodEnter 标注方法的返回值 * param returnValue 方法返回结果 * param throwable 异常 */ Advice.OnMethodExit(onThrowable Throwable.class) static void exit(Advice.Origin Method method, Advice.Enter long start, Advice.Return(readOnly false, typing Assigner.Typing.DYNAMIC) Object returnValue, Advice.Thrown Throwable throwable) { String methodInfo method.getDeclaringClass().getName() . method.getName(); if (throwable ! null) { System.err.println(方法【 methodInfo 】执行耗时 (System.currentTimeMillis() - start) ms异常 throwable.getMessage()); } else { System.out.println(方法【 methodInfo 】执行耗时 (System.currentTimeMillis() - start) ms); } } }Agent模块入口类package wxw.mengyuan; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.matcher.ElementMatchers; import net.bytebuddy.utility.JavaModule; import java.lang.instrument.Instrumentation; import java.security.ProtectionDomain; public class DemoAgent { /** * JVM启动时加载 * param agentArgs 参数 * param inst 该对象可以操作一些类里面的方法 */ public static void premain(String agentArgs, Instrumentation inst) { System.out.println(静态加载当前方法执行在main入口方法之前); } /** * JVM运行时动态加载 * param agentArgs 参数 * param inst 该对象可以操作一些类里面的方法 */ public static void agentmain(String agentArgs, Instrumentation inst) { System.out.println(动态加载JVM运行过程中加载); System.out.println(参数 agentArgs); // 创建转换器 AgentBuilder.Transformer transformer new AgentBuilder.Transformer() { Override public DynamicType.Builder? transform(DynamicType.Builder? builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, ProtectionDomain protectionDomain) { return builder // 对构造方法的拦截处理 .visit(Advice.to(ConstructorAdvice.class).on(ElementMatchers.isConstructor())) // 对非构造方法的拦截处理 // 仅此仅拦截 public 修饰符的方法 .visit(Advice.to(NotConstructorAdvice.class).on(ElementMatchers.isPublic().and(ElementMatchers.not(ElementMatchers.isConstructor())))); } }; // 开始构建 new AgentBuilder.Default() .disableClassFormatChanges() .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) // 打印调试日志 .with(AgentBuilder.Listener.StreamWriting.toSystemOut().withErrorsOnly()) // 拦截哪些类 // 此处仅拦截自身项目下、带有注解 Controller、RestController 的类 .type(ElementMatchers.nameStartsWith(wxw.mengyuan).and( ElementMatchers.isAnnotatedWith(ElementMatchers.named(org.springframework.web.bind.annotation.RestController)) .or(ElementMatchers.isAnnotatedWith(ElementMatchers.named(org.springframework.stereotype.Controller))) )) // 设置转换器 .transform(transformer) // 开始安装 .installOn(inst); System.out.println(动态加载加载完成); } }Spring MVC应用Controller类package wxw.mengyuan.banner; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; RestController RequestMapping(/demo) public class DemoController { /** * 此方法会被拦截增强 */ PostConstruct public void init() { System.out.println(Controller初始化完毕); } /** * 此方法会被拦截增强 */ RequestMapping(demoTest) public String demoTest() { print(); return 娃哈哈~; } /** * 私有方法此方法不会被拦截增强 */ private void print() { System.out.println(进入了Controller方法); } }Spring MVC应用启动日志测试工程依赖坐标dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy/artifactId version1.17.8/version /dependency dependency groupIdnet.bytebuddy/groupId artifactIdbyte-buddy-agent/artifactId version1.17.8/version /dependency dependency groupIdnet.java.dev.jna/groupId artifactIdjna/artifactId version5.18.1/version scopecompile/scope /dependency dependency groupIdnet.java.dev.jna/groupId artifactIdjna-platform/artifactId version5.18.1/version scopecompile/scope /dependency测试工程测试类编写后运行package com.mengyuan; import net.bytebuddy.agent.VirtualMachine; import java.io.IOException; public class DemoMain { public static void main(String[] args) { try { // 参数为目标JVM的PID VirtualMachine vm VirtualMachine.ForHotSpot.attach(56900); vm.loadAgent(D:\\Projects\\DEMO\\Demo-Agent\\target\\demo-agent-1.0.0.jarkey1value1); System.out.println(运行时动态加载成功); } catch (IOException e) { throw new RuntimeException(e); } } }Spring MVC应用动态加载日志Spring MVC应用接口调用日志学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询