96SEO 2026-07-03 20:49 1
说实话,JavaEE中的反射、注解、代理模式这些技术是真的强大,哈哈,你懂的。
反射:获取成员变量JVM会通过反射自动的拿到代理目标,如下方代码会先通过字节码对象获得的信息,而在内部类的method参数就是通过字节码对象反射过来的

import java.lang.reflect.Field;public class Demo032 { public static void main throws Exception { //目标:使用反射解析操作成员变量 // 获取字节码对象 Class clazz = Dog.class; //.解析字节码对象中所有成员变量 Field declaredFields = clazz.getDeclaredFields; //打印字节码中所有的成员变量 System.out.println; for { System.out.println; } //.指定无参构造器创建对象 Object obj = clazz.getConstructor.newInstance; System.out.println; //.获取name私有成员变量 Field nameField = clazz.getDeclaredField; nameField.setAccessible;// 开启暴力反射 //.将name的值设置为“旺财” nameField.set;// 对象名.实例成员变量 = 值 System.out.println; }}
运行结果
反射:获取成员方法
语法
Class提供了从类中获取成员方法的API
package com.ita._02反射第一步获取字节码对象;public class Demo021 { public static void main throws Exception { //目标:反射第一步:或者class对象黑马程 // Class c1 = 类名.class Class clazz1 = Demo021.class; // 调用Class提供方法: public static Class forName; Class clazz2 = Class.forName; // Object提供的方法: public Class getClassO;Class c3 = 对象.getClass; Demo021 demo021 = new Demo021; Class clazz3 = demo021.getClass; System.out.println; System.out.println; System.out.println; }}
语法
Class提供了从类中获取构造器的方法。
Star proxy = Proxy.newProxyInstance.getClassLoader,//写法1:写死接口 new Class{Star.class},//写法2:获取目标实现的接口数组 star.getClass.getInterfaces,//获取目标字节码中所有实现的接口类型数组 new InvocationHandler{ @Override public Object invoke throws Throwable { ... } });
害,这个问题啊,其实有hen多原因,你得一步步排查。
检查你的网站内容质量是否足够高,是否有原创内容,是否对用户有帮助。
然后kankan你的网站是否被百度爬虫抓取,Ke以在百度站长工具里查kan。
还有,你的网站是否Zuo了合理的SEO优化,比如关键词布局、内链建设等。
咱就是说这些dou是基础,但hen重要。
反射、注解、动态代理在框架中的应用
后续学习的Spring框架就是利用反射、注解、动态代理这几项技术来Zuo的
第三步:动态代理—— Spring 的肌肉
获取到成员变量的作用:依然是赋值、取值。
直接去查kan Proxy 类和 InvocationHandler 接口,它们俩就堂堂正正地躺在 java.lang.reflect 这个包下面。
你kan啊,反射这个东西,用得好,Ke以大大简化代码,提高灵活性,不对不对,应该是Ke以让你的代码geng加优雅!
java package com.ita._03反射获取字节码对象里面所有成员;
public class Dog { private String name; private int age;
public void eat{
System.out.println;
}
private String eat{ System.out.println; return "谢谢!谢谢!"; }
public Dog { }
private Dog{ this.name = name; }
public Dog { this.name = name; this.age = age; }
@Override public String toString { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
这个Dog类,就是我们用来测试反射的例子。
Demo031,解析字节码对象构造器
java import java.lang.reflect.Constructor;
public class Demo031 { public static void main throws Exception { //目标:使用反射方式动态获取指定类的构造器方法 //作用:Ke以通过反射灵活执行构造器创建对象 System.out.println; demo; System.out.println; demo; }
//反射实现的通用方法:Ke以接受任意类型,创建无参构造器对象和一个String类型有参构造器对象 public static void demo throws Exception { //.获取这个类所有的构造器方法 Constructor declaredConstructors = clazz.getDeclaredConstructors; //.打印所有构造器方法 System.out.println; for { System.out.println; }
//.获取指定的无参构造器对象
Constructor declaredConstructor = clazz.getDeclaredConstructor;
declaredConstructor.setAccessible;//Ru果当前构造器是私有的就需要执行这句代码,否则不允许访问私有。
//.执行构造器动态创建对象
Object obj = declaredConstructor.newInstance;
// .打印对象
System.out.println;
System.out.println;
//.解析一个够参构造器
try {
Constructor declaredConstructor1 = clazz.getDeclaredConstructor;
declaredConstructor1.setAccessible;//设置私有允许访问
//执行构造器
Object obj2 = declaredConstructor1.newInstance;
System.out.println;
} catch {
System.out.println;
}
} }
运行结果如下你Ke以kankan。
运行结果
反射案例:任意对象数据写入磁盘文件
需求:对于任意一个对象,该框架douKe以把对象的字段名和对应的值,保存到文件中去
思路:利用反射获得对象的字段名和对应的值,利用IO缓冲流将信息写入文件中
代码:
创建两个实体类,StudentTeacher作为例子
java package src.reflectionExpection;
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;
@Data @AllArgsConstructor @NoArgsConstructor public class Student { private String name; private int age; private char sex; private double height; private String hobby; }
还有Teacher.java
java package src.reflectionExpection;
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;
@Data @NoArgsConstructor @AllArgsConstructor public class Teacher { private String name; private double salary; }
这样,我们就有了两个测试用的实体类。
核心解析对象类的代码如下利用了Java的反射机制来解析对象的字段。
java package src.reflectionExpection;
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.Writer; import java.lang.reflect.Field;
public class ObjectDataToFileUtil {
public static void writeData throws Exception{
try(
//.创建输出流对象 //低级流字符输出流 Writer out = new FileWriter; //高级流字符缓冲输出流 BufferedWriter bout = new BufferedWriter ){
//.根据obj得到字节码对象 Class clazz = obj.getClass; //.输出类名字写到文件中 String simpleName = clazz.getSimpleName; bout.write); //format为格式化字符串 bout.newLine;//在文件中输出换行 //.获取字节码对象中所有成员变量得到Field Field declaredFields = clazz.getDeclaredFields; //.Field 数组遍历 for { // 解析获取每个成员变量名字和值 declaredField.setAccessible; String name = declaredField.getName;//成员变量的名字 Object value = declaredField.get; // 使用输出流输出数据 bout.write);
}
//提示成功 System.printf;
}
}
}
Zui后在主类中运行测试即可。
java package src.reflectionExpection;
public class Main {
public static void main {
try {
//准备学生对象数据
Student student = new Student;
//准备老师对象数据
Teacher teacher = new Teacher;
//写入磁盘
ObjectDataToFileUtil.writeData;
ObjectDataToFileUtil.writeData;
} catch {
e.printStackTrace;//给程序员kan
System.out.println;//给用户kan的
}
}
}
这样,我们就实现了将任意对象的字段数据写入文件中的功Neng。
运行结果你应该Nengkan到文件里有了相应的数据哈!
注解概述-注解的原理
就是Java代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。
除了代理还有中介公司,中介公司需要找到相对应的代理来安排演唱会,中介要如何找到合适的代理呢?通过接口,而代理和代理目标则作为接口的实现类被接口管理就Ke以了。
注意,这里说的可是Java注解哦!
元注解的使用及含义说明元注解是描述注解的注解,每个注解dou有两个元注解分别是@Retention和@Target
这里咱详细说说这两个元注解的作用和使用场景哈!
注解案例与应用场景分析 注解案例一: 简易版本Junit开发 注解案例二: 其他应用场景 动态代理设计模式深度剖析 为什么需要动态代理? JDK动态代理的实现原理 AOP编程思想与Spring AOP 什么是AOP? Spring AOP的实现原理与应用 JavaEE开发中的Zui佳实践与常见问题解决希望这篇文章Neng帮到你理解JavaEE中的这些高级特性哦!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback