Java SE-12Java加强-Java高级技术(反射、注解、动态代理)
文章目录Java高级技术了解一、单元测试1. 传统单元测试的问题2. Junit单元测试框架核心优点使用步骤3. 核心小结二、反射Reflection1. 反射的定义2. 反射的核心学习内容3. 第一步获取Class对象的三种方式4. 获取并操作类的各种成分1获取并操作构造器2获取并操作成员变量3获取并操作成员方法5. 反射的作用与应用场景核心作用实战案例简易对象属性保存框架三、注解1. 注解的概述2. 自定义注解定义语法示例3. 元注解1Target2Retention示例4. 注解的解析核心指导思想解析的核心接口5. 注解的实战案例案例1自定义注解并解析案例2简易版Junit框架6. 注解的核心作用四、动态代理1. 代理的核心思想生活类比2. Java动态代理的核心API3. InvocationHandler的核心方法返回值4. 动态代理的实战案例场景实现思路核心好处5. 动态代理的核心价值Java高级技术了解本次Java高级技术学习围绕单元测试、反射、注解、动态代理展开均为源码、框架、架构师层面的核心技术以下是详细内容整理一、单元测试1. 传统单元测试的问题传统在main方法中编写测试代码存在明显缺陷无法实现自动化测试一个方法测试失败可能影响其他方法无测试报告需程序员手动观察测试结果测试方法耦合度高无法单独针对某个方法测试。2. Junit单元测试框架Junit是第三方开源的单元测试框架主流开发工具如IDEA已集成核心针对方法最小功能单元做正确性测试。核心优点可灵活选择单个/全部方法测试支持自动化且测试方法相互独立自动生成测试报告绿色代表测试通过红色代表失败无需手动分析。使用步骤导入Junit框架jar包IDEA集成无需手动导入为业务类定义对应测试类为每个业务方法编写公共、无参、无返回值的测试方法测试方法上声明Test注解在方法内调用被测试的业务方法执行测试右键单个测试方法执行单测右键测试类/模块执行全测。3. 核心小结作用测试类中方法的正确性执行方式单方法右键运行全方法选择类/模块运行结果标识绿色通过红色失败。二、反射Reflection1. 反射的定义加载类并允许以编程的方式解剖类中的各种成分包括成员变量、构造器、成员方法等。2. 反射的核心学习内容加载类获取类的字节码Class对象获取类的构造器Constructor对象获取类的成员变量Field对象获取类的成员方法Method对象。3. 第一步获取Class对象的三种方式反射的入口是获取类的Class对象有三种核心方式直接通过类名获取最常用通过全类名获取需处理异常通过对象实例获取。4. 获取并操作类的各种成分Class类提供了获取类成分的方法分为仅获取public修饰和获取所有存在的成分两类部分成分需通过setAccessible(true)实现暴力反射突破访问权限修饰符的限制。1获取并操作构造器构造器的核心作用初始化对象并返回。Class获取构造器的方法说明获取全部public修饰的构造器获取全部public修饰的构造器获取全部构造器任意修饰符获取全部构造器任意修饰符获取单个public修饰的构造器指定参数类型获取单个public修饰的构造器指定参数类型获取单个构造器任意修饰符指定参数类型获取单个构造器任意修饰符指定参数类型Constructor的操作方法说明调用构造器传入参数创建对象调用构造器传入参数创建对象设置为true开启暴力反射突破访问权限设置为true开启暴力反射突破访问权限2获取并操作成员变量成员变量的核心作用赋值、取值。Class获取成员变量的方法说明获取全部public修饰的成员变量获取全部public修饰的成员变量获取全部成员变量任意修饰符获取全部成员变量任意修饰符获取单个public修饰的成员变量指定变量名获取单个public修饰的成员变量指定变量名获取单个成员变量任意修饰符指定变量名获取单个成员变量任意修饰符指定变量名Field的操作方法说明为指定对象的该变量赋值为指定对象的该变量赋值获取指定对象的该变量值获取指定对象的该变量值开启暴力反射突破访问权限开启暴力反射突破访问权限3获取并操作成员方法成员方法的核心作用执行方法。Class获取成员方法的方法说明获取全部public修饰的成员方法含父类继承的获取全部public修饰的成员方法含父类继承的获取本类全部成员方法任意修饰符不含父类获取本类全部成员方法任意修饰符不含父类获取单个public修饰的方法指定方法名参数类型获取单个public修饰的方法指定方法名参数类型获取单个本类方法任意修饰符指定方法名参数类型获取单个本类方法任意修饰符指定方法名参数类型Method的操作方法说明触发指定对象的该方法执行返回方法执行结果触发指定对象的该方法执行返回方法执行结果开启暴力反射突破访问权限开启暴力反射突破访问权限5. 反射的作用与应用场景核心作用运行时动态获取类的全部成分并操作可以破坏类的封装性暴力反射可以绕过泛型的约束最核心用途开发Java通用框架主流框架如Spring均基于反射设计。实战案例简易对象属性保存框架需求对任意对象将其字段名和对应值保存到文件中。实现步骤定义接收任意对象的方法通过反射获取对象的Class对象再获取全部成员变量遍历成员变量提取对象中该变量的具体值将变量名和值写入文件。三、注解1. 注解的概述定义Java代码中的特殊标记如Override、Test让其他程序根据注解信息决定执行逻辑使用位置可标记在类、构造器、方法、成员变量、参数等位置。2. 自定义注解定义语法publicinterface注解名称{public属性类型 属性名()default默认值;}特殊属性名value若注解只有一个value属性使用时可省略value注解本质一个继承了Annotation接口的接口注解(…)本质是该接口的实现类对象。示例// 自定义注解publicinterfaceMyTest1{Stringaaa();booleanbbb();String[]ccc();}// 使用注解MyTest1(aaa李四,bbbtrue,ccc{Go,Python})publicvoidtest(){}3. 元注解定义注解注解的注解用于约束自定义注解的使用规则核心有两个Target、Retention。1Target作用声明被修饰的注解可使用的位置常用取值ElementType.TYPE类、接口ElementType.FIELD成员变量ElementType.METHOD成员方法ElementType.PARAMETER方法参数ElementType.CONSTRUCTOR构造器ElementType.LOCAL_VARIABLE局部变量。2Retention作用声明注解的保留周期常用取值优先级递增RetentionPolicy.SOURCE仅源码阶段字节码文件中无RetentionPolicy.CLASS默认值保留到字节码文件运行时无RetentionPolicy.RUNTIME开发常用保留到运行阶段可通过反射解析。示例// 约束Test注解仅能标记方法且保留到运行时Retention(RetentionPolicy.RUNTIME)Target({ElementType.METHOD})publicinterfaceTest{}4. 注解的解析定义判断类/方法/变量上是否存在注解并将注解中的属性值解析出来。核心指导思想要解析谁上面的注解先获取谁的对象如解析方法注解先获取Method对象解析类注解先获取Class对象。解析的核心接口Class、Method、Field、Constructor均实现了AnnotatedElement接口拥有解析注解的能力核心方法如下方法说明获取当前对象上的所有注解获取当前对象上的所有注解获取当前对象上指定类型的注解对象获取当前对象上指定类型的注解对象判断当前对象上是否存在指定注解判断当前对象上是否存在指定注解5. 注解的实战案例案例1自定义注解并解析定义注解MyTest4包含String value()、double aaa() default 100、String[] bbb()约束可标记在类和方法保留到运行时定义类Demo在类和其方法test1上标记MyTest4定义测试类AnnotationTest3通过反射获取Demo的Class对象和Method对象解析注解信息。案例2简易版Junit框架需求标记MyTest的方法自动执行未标记的不执行。实现步骤定义自定义注解MyTestTarget(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME)定义若干方法部分标记MyTest通过反射获取类的所有方法遍历判断是否存在MyTest若存在则执行。6. 注解的核心作用对Java代码的各类成分做标记后续程序通过解析注解对标记的成分做特殊处理如Junit中Test标记的方法被当作测试方法执行。四、动态代理1. 代理的核心思想对象将部分职责转移给代理对象原对象专注于核心业务代理对象负责非核心业务如日志、统计、前置准备核心要求代理对象必须拥有与原对象相同的方法通常通过实现同一接口保证。生活类比明星原对象专注于唱歌、跳舞核心业务经纪人代理对象负责准备场地、收钱、对接资源非核心业务二者均实现“明星”接口含唱歌、跳舞方法。2. Java动态代理的核心APIJava通过java.lang.reflect.Proxy类创建动态代理对象核心方法publicstaticObjectnewProxyInstance(ClassLoaderloader,Class?[]interfaces,InvocationHandlerh)方法参数说明ClassLoader loader指定加载生成的代理类的类加载器Class?[] interfaces指定代理对象实现的接口决定代理对象有哪些方法InvocationHandler h指定代理对象的核心逻辑即代理对象执行方法时要做的事情。3. InvocationHandler的核心方法InvocationHandler接口只有一个方法invoke代理对象的所有方法执行都会触发该方法方法定义publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable参数说明Object proxy生成的代理对象本身Method method当前执行的原对象的方法反射的Method对象Object[] args当前执行方法传入的参数返回值原对象方法执行后的返回结果。4. 动态代理的实战案例场景用户管理类包含登录、删除用户、查询用户方法需统计每个方法的执行耗时且不修改原类代码。实现思路定义用户管理接口含登录、删除、查询方法原用户管理类实现该接口创建代理对象实现同一接口在InvocationHandler的invoke方法中编写逻辑记录方法执行开始时间 → 调用原对象方法 → 记录结束时间 → 计算并打印耗时。核心好处无侵入式增强不修改原业务代码通过代理对象实现功能增强符合“开闭原则”。5. 动态代理的核心价值是Java框架的核心底层技术如Spring AOP实现业务代码与非业务代码的解耦让开发人员专注于核心业务开发。

相关新闻

OpenClaw 实战手记:技能Skills 的开发、部署与那些容易踩的坑

OpenClaw 实战手记:技能Skills 的开发、部署与那些容易踩的坑

写在前面:这篇主要是记录我自己在使用 OpenClaw 过程中,关于 Skills(技能) 模块的一些折腾心得。包括怎么找现成的、怎么让 AI 帮我写新的、文件该放哪,以及最要命的环境依赖问题。目的:防止以后忘了细节&a…

2026/7/6 1:54:33 阅读更多 →
基于大数据的粮食产量预测及可视化平台

基于大数据的粮食产量预测及可视化平台

目录数据采集与处理预测模型构建可视化平台开发系统部署与测试持续优化与扩展项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作数据采集与处理 通过农业部门、气象局、卫星遥感等渠道获取历史粮食产量数…

2026/7/6 15:53:16 阅读更多 →
旋转坐标系下的无传感器器控制方法:基于旋转高频注入和同轴系高通滤波器的误差提取与位置观测器

旋转坐标系下的无传感器器控制方法:基于旋转高频注入和同轴系高通滤波器的误差提取与位置观测器

该模型在旋转坐标系下采样旋转高频注入的方法进行低速时的无传感器器控制,对静止坐标系下的电流进行同轴系高通滤波器提取负序分量,继而采用外差法进项误差提取,误差代入位置观测器得到PMSM的转子角度。高频注入法在低速无传感器控制领域就像…

2026/7/6 11:55:33 阅读更多 →

最新新闻

ai模特识别能力如何?商用图片批量生成平台横评与实用对比

ai模特识别能力如何?商用图片批量生成平台横评与实用对比

随着ai模特识别技术持续进步,电商行业的商品展示效率和多样性得以大幅提升。作为从业者,我实际体验多款平台后发现,商用级AI图片处理工具正在逐步成为电商图片生产新基建。 作图鸟详解 作图鸟地址:https://www.zuotuniao.com/?…

2026/7/6 15:52:49 阅读更多 →
Hermes Studio 安全配置最佳实践:认证、授权与数据保护

Hermes Studio 安全配置最佳实践:认证、授权与数据保护

Hermes Studio 安全配置最佳实践:认证、授权与数据保护 【免费下载链接】hermes-studio Web dashboard for Hermes Agent — multi-platform AI chat, session management, scheduled jobs, usage analytics 项目地址: https://gitcode.com/gh_mirrors/he/hermes…

2026/7/6 15:52:49 阅读更多 →
Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路

Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路

Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路 【免费下载链接】fashion-mnist A MNIST-like fashion product database. Benchmark :point_down: 项目地址: https://gitcode.com/gh_mirrors/fa/fashion-mnist 在机器学习的演进历程中&…

2026/7/6 15:48:45 阅读更多 →
深度解析Marp插件开发:5大进阶实战技巧与架构设计指南

深度解析Marp插件开发:5大进阶实战技巧与架构设计指南

深度解析Marp插件开发:5大进阶实战技巧与架构设计指南 【免费下载链接】marp The entrance repository of Markdown presentation ecosystem 项目地址: https://gitcode.com/gh_mirrors/mar/marp Marp作为现代化的Markdown演示文稿生态系统,为开发…

2026/7/6 15:48:45 阅读更多 →
Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造

Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造

Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造 【免费下载链接】browser Lightpanda: the headless browser designed for AI and automation 项目地址: https://gitcode.com/GitHub_Trending/browser32/browser 在AI代理、自动化测试…

2026/7/6 15:46:42 阅读更多 →
如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南

如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南

如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南 【免费下载链接】Open-Sora Open-Sora: Democratizing Efficient Video Production for All 项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora 想象一下,只需输入几个简单的文…

2026/7/6 15:44:40 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻