首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

传递MethodHandles.lookup().lookupClass()与将Class<?>传递给getLogger方法

传递MethodHandles.lookup().lookupClass()与将Class<?>传递给getLogger方法都是用于获取日志记录器的方式,但它们在实现上有一些差异。

  1. 传递MethodHandles.lookup().lookupClass():
    • 概念:MethodHandles.lookup().lookupClass()是Java中一种获取当前类的方式,它返回一个Class对象,表示当前执行代码的类。
    • 分类:这种方式属于动态获取类的方式,可以在运行时获取当前类的信息。
    • 优势:使用MethodHandles.lookup().lookupClass()可以避免硬编码类名,使代码更加灵活和可维护。
    • 应用场景:常用于日志记录器的初始化,以获取当前类的类名作为日志记录器的名称。
    • 推荐的腾讯云相关产品:无
  • 将Class<?>传递给getLogger方法:
    • 概念:将Class<?>传递给getLogger方法是一种常见的获取日志记录器的方式,其中getLogger是一个日志记录器工厂方法,接受一个Class对象作为参数。
    • 分类:这种方式属于静态获取类的方式,需要在编码阶段指定具体的类。
    • 优势:使用Class<?>传递给getLogger方法可以明确指定日志记录器的名称,方便在日志输出中区分不同的类。
    • 应用场景:常用于日志记录器的初始化,以指定特定类的类名作为日志记录器的名称。
    • 推荐的腾讯云相关产品:无

总结: 传递MethodHandles.lookup().lookupClass()和将Class<?>传递给getLogger方法都是获取日志记录器的方式,前者是动态获取当前类的方式,适用于避免硬编码类名;后者是静态获取指定类的方式,适用于明确指定日志记录器的名称。具体使用哪种方式取决于实际需求和编码习惯。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

servicecomb-saga源码解读

从上述处理流程可以看出omega主要完成以下4大功能: 注入分布式事务ID(包括向当前服务注入分布式事务id、向调用的其它服务传递分布式事务id) 在整个分布式事务开始与结束时记录saga执行事件 在本地事务方法执行的前后记录...将打上@Compensable这个annotation的方法提前注册好,保存在compensationContext这个bean中。...localTxId); LOG.debug("Restored context back to {}", context); } } 通过不同RequestInterceptor将当前的分布式上下文信息通过请求头等方式传递给其它的服务...omegaContext.localTxId()); } return execution.execute(request, body); } } 通过HandlerInterceptor在调用具体业务方法前将传递来的分布式上下文信息保存进...(MethodHandles.lookup().lookupClass()); private final MessageSender messageSender; private final

1.6K10
  • MethodHandle结合LambdaMetafactory-使用方法及性能测试

    一个简单的使用方法为 step1: 创建mh lookup、根据访问权限任选其一即可 //仅访问public方法 MethodHandles.Lookup publicLookup = MethodHandles.publicLookup...(); //访问public、private、protected方法 MethodHandles.Lookup allLookup = MethodHandles.lookup(); step2: 创建...MethodType,它用来描述被访问的方法的参数类型、返回值类型,JVM强制要求声明的Method Type与实际调用方法的参数类型必须匹配 // 即入参为String、返回为void类型 MethodType...在底层,OptaPlanner 将复杂的人工智能优化算法(例如禁忌搜索、模拟退火、延迟接受和其他元启发式算法)与非常有效的分数计算和其他最先进的 NP-complete 或 NP-约束求解技术相结合。...MethodAccessor { private static final Logger logger = LoggerFactory.getLogger(MethodAccessor.class

    2K40

    Python日志模块logging的使用

    level': 'DEBUG', 'handlers': ['file'], 'propagate': True # 设为 False则禁止将日志消息传递给父级记录器的处理程序中...level': 'DEBUG', 'handlers': ['file'], 'propagate': True # 设为 False则禁止将日志消息传递给父级记录器的处理程序中...() 即可获取相应配置日志器,其接受一个日志器的名字,不传则默认使用 root 根日志器,同 logging.getLogger('root') 效果一致。...warning log test ERROR main 78 error log test 日志文件 logs/test.log 由于 server 日志器设置了 'propagate': True,会 将日志消息传递给父级记录器的处理程序中...handlers: [server_file_handler, error_file_handler] propagate: True # 设为 False则禁止将日志消息传递给父级记录器的处理程序中

    1K10

    MethodHandle方法句柄使用分享

    查找私有方法、超类的方法或隐藏的方法(在子类中被重写的方法)第一种方式 使用工厂创建LookUpjs 代码解读复制代码MethodHandles.Lookup methodHandles=MethodHandles.lookup...invokeExact():提供严格的类型检查,要求参数类型与目标方法完全匹配。...invokeWithArguments():允许使用列表作为参数进行调用,提供了更大的灵活与反射的区别性能:MethodHandle通常比反射更快,因为它绕过了许多反射的额外开销。...内联优化:JVM 编译器可以将 ConstantCallSite 的调用内联到调用者的代码中。这意味着调用 CallSite 的代码可以直接转换为目标方法句柄的代码,从而避免了调用开销。...lookup = MethodHandles.lookup();MethodType tyep = MethodType.methodType(void.class);// 不使用in方法查找MethodHandle

    6310

    更高效的反射调用方式被我找到了!

    json中的数据给对应字段进行赋值,我们可以编写一个简单的JMH测试来评估一下通过反射调用来创建对象的性能,与直接调用对象构造方法之间的差距: @BenchmarkMode(value = Mode.AverageTime...,与直接使用MethodHandle相比,具备了更多的优化工作,根据官方的说法,在使用MethodHandle时因将字段尽可能定义为static final,这样JVM可以将其进行常量折叠,从而实现巨大的性能提升...lookup = MethodHandles.privateLookupIn(ReflectionTest.class, MethodHandles.lookup()); bh.consume...,与直接调用是几乎完全一致的,这也就达成了我们想要的效果,但是Lambda生成的性能非常不容乐观,与直接使用箭头函数进行生成的性能有着天壤之别,好在如果Lambda表达式没有捕获任何的外部变量,比如我们在示例中调用的...小结 本文介绍了一种在Java中的新的反射调用方式,即使用类似于Lambda表达式的生成的方式进行反射,可以将一些简单的方法,例如get和set方法,直接转化为相应的Lambda表达式来调用,虽然可以做到和直接调用一致的性能

    31710

    是时候在 Java 中使用方法句柄和变量句柄了,它的效果比反射要好

    本文将介绍如何使用方法句柄(MethodHandle)和变量句柄(VarHandle)以编程方式访问方法和字段。...与反射相比,MethodHandle 的调用速度更快,因为它们不需要在运行时解析方法签名。使用示例:要使用方法句柄,首先需要获取一个方法的句柄。...这可以通过MethodHandles.lookup()方法与VarHandle工厂方法结合使用来实现。然后,可以使用get、set等方法来读取或写入字段的值。...与反射类似,这些类也让你能够访问对象上的方法和字段,并且更加简洁。方法句柄\变量句柄 Vs....= MethodHandles.privateLookupIn(MyClass.class, MethodHandles.lookup()).findVarHandle(MyClass.class,

    15910

    死磕Java内部类(一篇就够)

    Demo对象自身加载到栈帧中 调用Demo$DemoRunnable类的init方法,注意这里将Demo对象作为了参数传递进来了 到这一步其实已经很清楚了,就是将外部类对象自身作为参数传递给了内部类构造器...外部类变量是怎么传递给内部类的?...如果将age改为private,编译器会在Demo类中生成二个方法,分别用于读取age和设置age,篇幅关系,这种情况留给大家自行测试。 解答为何局部变量传递给匿名内部类需要是final?...通过上面的例子可以看到,不是一定需要局部变量是final的,但是你不能在匿名内部类中修改外部局部变量,因为Java对于匿名内部类传递变量的实现是基于构造器传参的,也就是说如果允许你在匿名内部类中修改值,...通过前面的知识,我们知道javac Animal.java命令将类编译成class,匿名内部类的方式会产生一个额外的类。那用Lambda表达式会不会也会编译新类呢?我们试一下便知。

    97030

    《深入理解Java虚拟机》读书笔记(七)–虚拟机字节码执行引擎(下)

    ,但与PrintStream接口没有继承关系,代码也不能运行,因为类型检查不合法。...); //在receiver.class中寻找方法 //并且通过bindTo将该方法的接收者(也就是this)传递给它 return MethodHandles.lookup() .findVirtual...1.2 MethodHandle和Reflection的区别 从本质上,Reflection和Method机制都是在模拟方法调用,但是Reflection是在模拟Java代码层次的方法调用;MethodHandles.lookup...1.3 invokedynamic指令 invokedynamic指令与MethodHandle机制的作用是一样的,都是为了解决原有4条方法调用指令分派规则固化在虚拟机之中的问题,把如何查找目标方法的决定权从虚拟机转嫁到具体的用户代码之中...注:书中给出的解决方案是: MethodType methodType = MethodType.methodType(void.class); MethodHandles.lookup().findSpecial

    29520

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券