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

网站建设设计企业怎么把网页打包成app

网站建设设计企业,怎么把网页打包成app,wordpress底部修改,做淘宝一件代发的网站java中关于反射与动态代理 java反射技术 1、什么是反射#xff1f; Java反射说的是在运行状态中#xff0c;对于任何一个类#xff0c;我们都能够知道这个类有哪些方法和属性。对于任何一个对象#xff0c;我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信…java中关于反射与动态代理 java反射技术 1、什么是反射 Java反射说的是在运行状态中对于任何一个类我们都能够知道这个类有哪些方法和属性。对于任何一个对象我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。所谓的反射实际上是获取到类的字节码.class文件再通过Class对象获取类的方法和属性。 反射案例 反射Reflection是 Java 中一种强大的机制允许在运行时动态地获取类的信息、调用类的方法、操作类的属性等。下面是几个涵盖反射各方面的案例示例 获取类的信息 通过反射可以获取类的信息如类名、方法、字段等。 import java.lang.reflect.*;public class ReflectionExample {public static void main(String[] args) throws Exception {// 获取类的 Class 对象Class? clazz Class.forName(java.util.ArrayList);// 获取类名String className clazz.getName();System.out.println(Class Name: className);// 获取类的方法信息Method[] methods clazz.getDeclaredMethods();System.out.println(Methods:);for (Method method : methods) {System.out.println(method.getName());}// 获取类的字段信息Field[] fields clazz.getDeclaredFields();System.out.println(Fields:);for (Field field : fields) {System.out.println(field.getName());}// 获取类的构造方法信息Constructor?[] constructors clazz.getDeclaredConstructors();System.out.println(Constructors:);for (Constructor? constructor : constructors) {System.out.println(constructor.toString());}} }动态创建对象 通过反射可以动态创建类的对象并调用其方法。 import java.lang.reflect.*;public class DynamicObjectCreation {public static void main(String[] args) throws Exception {// 获取类的 Class 对象Class? clazz Class.forName(java.util.ArrayList);// 使用反射创建对象Object arrayList clazz.getDeclaredConstructor().newInstance();// 调用对象的方法Method addMethod clazz.getDeclaredMethod(add, Object.class);addMethod.invoke(arrayList, Hello);addMethod.invoke(arrayList, World);// 输出结果System.out.println(arrayList); // 输出[Hello, World]} }修改私有字段 通过反射可以访问和修改类中的私有字段。 import java.lang.reflect.*;public class PrivateFieldAccess {public static void main(String[] args) throws Exception {// 创建一个类的实例MyClass obj new MyClass();// 获取类的 Class 对象Class? clazz obj.getClass();// 获取私有字段Field privateField clazz.getDeclaredField(privateField);// 设置字段可访问privateField.setAccessible(true);// 修改私有字段的值privateField.set(obj, New value);// 访问私有字段的值System.out.println(privateField.get(obj)); // 输出New value}static class MyClass {private String privateField Initial value;} }执行私有方法 通过反射可以调用类中的私有方法。 java import java.lang.reflect.*;public class PrivateMethodInvocation {public static void main(String[] args) throws Exception {// 创建一个类的实例MyClass obj new MyClass();// 获取类的 Class 对象Class? clazz obj.getClass();// 获取私有方法Method privateMethod clazz.getDeclaredMethod(privateMethod);// 设置方法可访问privateMethod.setAccessible(true);// 调用私有方法privateMethod.invoke(obj);}static class MyClass {private void privateMethod() {System.out.println(Executing private method);}} }使用反射实现通用的 JSON 序列化工具 通过反射可以实现一个通用的 JSON 序列化工具将任意 Java 对象序列化为 JSON 字符串。 java import com.alibaba.fastjson.JSON; import java.lang.reflect.*;public class JSONSerializer {public static void main(String[] args) throws Exception {MyClass obj new MyClass(Alice, 25);// 序列化对象为 JSON 字符串String jsonString serializeObject(obj);System.out.println(jsonString);// 反序列化 JSON 字符串为对象MyClass newObj deserializeObject(jsonString, MyClass.class);System.out.println(newObj.getName());System.out.println(newObj.getAge());}// 序列化对象为 JSON 字符串public static String serializeObject(Object obj) {return JSON.toJSONString(obj);}// 反序列化 JSON 字符串为对象public static T T deserializeObject(String jsonString, ClassT clazz) {return JSON.parseObject(jsonString, clazz);}static class MyClass {private String name;private int age;public MyClass(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public int getAge() {return age;}} }这些示例展示了反射在 Java 中的广泛应用从获取类信息、动态创建对象、修改私有字段和调用私有方法到实现通用的 JSON 序列化工具。反射使得在编译时未知类的情况下能够在运行时进行灵活的操作和扩展。 反射不做过多解释 动态代理 这里主要讲JDK的动态代理 JDK动态代理的步骤 步骤一定义接口 首先我们定义一个简单的接口UserService包含两个方法save和delete。 java public interface UserService {void save(String username);void delete(String username); } 步骤二实现接口 接下来实现UserService接口的具体类UserServiceImpl用于实际执行保存和删除用户的操作。java public class UserServiceImpl implements UserService {Overridepublic void save(String username) {System.out.println(Saving user: username);}Overridepublic void delete(String username) {System.out.println(Deleting user: username);} }步骤三实现InvocationHandler 创建一个实现了InvocationHandler接口的类UserServiceInvocationHandler在这里我们将为方法调用添加日志记录功能。 java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method;public class UserServiceInvocationHandler implements InvocationHandler {private final UserService target;public UserServiceInvocationHandler(UserService target) {this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(Before calling method: method.getName());Object result method.invoke(target, args);System.out.println(After calling method: method.getName());return result;} }步骤四创建代理对象 在主程序中我们使用Proxy.newProxyInstance方法创建代理对象。这里将实现UserService接口的代理对象它将会在每次调用save和delete方法时自动在控制台输出调用前后的日志信息。 java import java.lang.reflect.Proxy;public class Main {public static void main(String[] args) {UserService realService new UserServiceImpl();UserServiceInvocationHandler handler new UserServiceInvocationHandler(realService);UserService proxyService (UserService) Proxy.newProxyInstance(Main.class.getClassLoader(),new Class[]{UserService.class},handler);proxyService.save(Alice);proxyService.delete(Bob);} }运行结果 当你运行上述代码时控制台会输出以下信息 Before calling method: save Saving user: Alice After calling method: save Before calling method: delete Deleting user: Bob After calling method: delete这些日志信息显示了在调用代理对象的save和delete方法时UserServiceInvocationHandler中的invoke方法分别在方法调用前后被执行从而实现了日志记录的功能。 总结 这个例子展示了如何使用JDK动态代理为一个实现了接口的类UserServiceImpl生成代理对象并在方法调用前后添加额外的日志记录逻辑。这种方式可以轻松地为现有代码添加各种额外的横切关注点cross-cutting concerns如日志记录、性能监控等而无需修改原始类的代码。 主要步骤 UserService realService new UserServiceImpl();UserServiceInvocationHandler handler new UserServiceInvocationHandler(realService);UserService proxyService (UserService) Proxy.newProxyInstance(Main.class.getClassLoader(),new Class[]{UserService.class},handler);我现在的理解是JDK的动态代理技术会根据我们想要代理的接口去获取需要实现的代理方法从而去构建一个代理类 在代理类中具有和实现这个接口的子类一样的方法调用newProxyInstance会创建一个这个代理类的对象而创建这个对象需要三个参数 一、第一个参数 Main.class.getClassLoader() 指定了类加载器用于加载生成的代理类一般这个参数用于当前方法所在类的加载器。具体原因我还未搞清楚 二、第二个参数 new Class[]{UserService.class} 是一个 Class 数组指定了代理类要实现的接口这里代理类会实现 UserService接口。这个参数可以去放多个接口意味着可以代理多个接口的方法进行增强前提是所要代理的类需要实现数组中的接口 三、第三个参数是一个 InvocationHandler 对象用于处理代理对象的方法调用。实际上InvocationHandler 可以采用匿名实现类来实现起作用主要是其重写的invoke的方法invoke(Object proxy, Method method, Object[] args) 这个方法可以传入一个被代理的类的对象进行原始方法的调用者指定也就是谁调用后面的methodMethod method是用来指定调用的方法这里其实只有创建了代理对象并且使用代理对象去调用方法时才会知道因为代理对象的方法名字和被代理对象时一致的我猜这里是直接获取的方法名Object[] args则是用来指定调用方法的入参调用被代理的对象的方法的入参。 四、生成对象 UserService proxyService (UserService) Proxy.newProxyInstance其实这里生成的是代理类的对只是代理类字节码文件在jvm中不是我们生成的我们看不到实际上是代理类对象 简化写法 public static void main(String[] args) {Star bigStar new BigStar(鸡哥);Star star (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), new Class[]{Star.class}, new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(代理开始);if (sing.equals(method.getName())) {System.out.println(代理开始唱歌);} else {System.out.println(代理开始跳舞);}Object result method.invoke(bigStar, args);System.out.println(代理结束);return result;}});star.sing(鸡哥);}JDK动态代理问题一 为什么只能代理接口的而不能代理实现类的。 关于JDK的动态代理设计 他底层生产的代理类会继承一个proxy类并且实现要代理的接口实现类的接口如果是代理接抽象类或者类的 就需要去继承这个抽象类的或者类这样就无法再去继承peoxy类从而无法实现JDK的动态代理这是设计问题。
http://www.zqtcl.cn/news/951149/

相关文章:

  • 网站建设售后培训wordpress 过滤html
  • 湖北森泰建设集团有限公司网站国外产品设计网站推荐
  • 网站建设与代运营产品介绍排版网页设计教程
  • 音乐网站排名搜索引擎网络推广方法
  • asp.net 企业网站昆明高端seo怎么做
  • 图书馆网站建设需求方案企业网站背景图片
  • 网站app的作用做家教网站资质
  • 资源网站搭建北京app网站建设
  • 天津做宠物饲料的网站wordpress添加注册页面模板
  • 网站建设公司石家庄php网站开发报价
  • 国外免费网站服务器链接cpa自己做网站
  • 手机网站的优缺点2024中国企业500强
  • 黄河道网站建设网站设计标语
  • 企业网站建设范文wordpress 5.1
  • 网站 河北 备案 慢设计一个营销方案
  • 网站建设培训合肥品牌设计案例
  • 建网站注册免费云服务器
  • 可以做网站的公司有哪些聊天软件开发厂家有哪些
  • 正规网站建设公司一般要多少钱婚纱网站有哪些
  • 企业网站开发目的和意义住房和城乡建设厅官网查询
  • 直播一级a做爰片免费网站wordpress 模板 使用
  • 网站开发中期检查优质的菏泽网站建设
  • 建设网站号码在线html编辑
  • 品牌型网站制作有哪些公司石家庄广告制作公司
  • 做网站赚几百万网站效果图怎么做的
  • 哪些网站做企业招聘不要花钱wordpress底部导航代码
  • 怎么用链接进自己做的网站企业组织架构
  • 建设新网站征求意见网站设计佛山
  • 重庆建设造价工程信息网站东莞电商页面设计公司
  • 乔拓云智能建站官网登录入口怎么样做网站卖农产品