首页 > 其他分享 >反射中setAccessIble(true)有什么作用?

反射中setAccessIble(true)有什么作用?

时间:2023-08-07 12:02:37浏览次数:39  
标签:反射 false setAccessible setAccessIble method User true public

结论

动态修改一个类的方法或属性或执行方法都要受安全体系的检查,而安全体系处理是非常消耗资源的。
因此运行期间想要动态修改类信息时提供了一个Accessible方法,其作用是是否逃避java安全体系的
检查,进行快速访问。相比不进行设置setAccessible=true的操作,性能消耗大概是20倍左右

举例

@Data
public class User {

    private String name;

    private int age;


    public void testMethod(){
    }
}
@Test
public void classTest() throws Exception {

    Class<?> userClass = Class.forName("com.abucloud.bo.User");

    User user = (User) userClass.newInstance();
    Method method = userClass.getDeclaredMethod("testMethod");
    // 此处setAccessible是默认值false
    // method.setAccessible(false);

    method.invoke(user);
    System.out.println("accessible = " + method.isAccessible());

}

输出:

accessible = false

由此可见,即使没有进行设置setAccessible=true时,当获取method.isAccessible()结果仍旧是false

源码分析

setAccessible(true)时,即设置override=true

image-20230807114300529

当执行method.invoke(user);方法时

image-20230807114352141

其他

  • setAccessible设置为true与getDeclaredMethod()、getMethod()有什么关系呢?
getDeclaredMethod()与getMethod()两个作用都是获取Class中指定的某个方法,前者可以拿到所有的方法,包括
私有方法;后者只能拿到public修饰的方法。他们与setAccessible没有任何关系

标签:反射,false,setAccessible,setAccessIble,method,User,true,public
From: https://www.cnblogs.com/party-abu/p/17611073.html

相关文章

  • 使用反射管理参数配置
    在C#中,反射是一种强大的机制,它允许我们在运行时检查和操作类型的成员,包括属性和字段。利用反射,我们可以实现参数的灵活配置和管理。本篇博客将详细介绍如何使用反射来管理参数配置,并提供一个帮助类的代码示例。创建参数配置类首先,我们需要创建一个参数配置类,该类将包含我们希望......
  • C#反射
    C#中的反射:通俗易懂详解反射是C#中一种强大的编程技术,它允许我们在运行时获取和操作类型的信息。通过反射,我们可以在不知道类型的完整信息的情况下,动态地创建对象、调用方法和访问属性。本文将深入介绍C#中反射的知识点,并提供简单易懂的示例和代码。1.引入命名空间首先,在使用......
  • 断言-Assert.isTrue(...);
    Assert.isTrue(...)是SpringFramework中的一个断言方法,用于对条件进行断言检查。如果条件为真,则继续执行程序;如果条件为假,则抛出异常并输出错误消息。下面是一个简单的例子,演示如何使用Assert.isTrue(...)方法:importorg.springframework.util.Assert;publicclassExam......
  • 什么是猴子补丁,有什么用途,什么是反射,python中如何使用反射,http和https的区别
    1什么是猴子补丁,有什么用途猴子补丁:动态修改或扩展代码的技术,通在不修改源代码的情况下,改变代码的执行方式或增加功能 -MonkeyPatching是在运行时(runtime)动态替换属性(attributes)或方法 -Python的类是可变的(mutable),方法(methods)只是类的属性(attributes);这允许我......
  • Java反射与自定义注解实现不同Bean属性映射的高效解决方案
    假设现有一个叫user的bean,里面有username、passsword、sex、createTime这四个属性,需要实现一个功能,把其它bean里的字段分别映射到user里的username、passsword、sex、createTime这几个属性上,然后可以根据其它的bean的实例自动转化为user的实例(填充对应属性值),下面是代码实现。Java......
  • Golang反射type和kind有什么区
    一、前言Go语言中的反射是由reflect包提供支持的,它定义了两个重要的类型Type和Value。任意值在反射中都可以理解为由reflect.Type和reflect.Value两部分组成,并且reflect包提供了reflect.TypeOf和reflect.ValueOf两个函数来获取任意对象的Value和Type。在Go语......
  • 反射机制--python
    引用:https://www.cnblogs.com/vipchenwei/p/6991209.htmlhttps://www.cnblogs.com/vipchenwei/p/6991209.html 1.反射是什么:反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)......
  • 反射
    usingSystem.Reflection; publicstaticstringJoin<T>(List<T>pListForJoin,stringpPropertyName,stringpSeparator,stringpEnclosed)       {           if(pListForJoin.Count>0)           {               L......
  • 硬件管理平台-硬件产品库-反射模块
    硬件产品库-反射模块公共项目改进在公共项目中对当前目录进行分组,主要按照使用场景进行划分按照上一章所描述的顺序进行1-4的划分,其中公共包为所有项目共用的代码,虽然该部分是编写期间随时进行编写的,但是按照个人习惯,喜欢将公共部分放到最上面。界面布局该项目暂不涉及酷炫......
  • swiper 设置 autoHeight: true, 第一个swiper下拉后,切换到第二个swiper后,滚动条不置
    给swiper添加事件on:{slideChangeTransitionEnd:function(swiper,index){document.documentElement.scrollTop=0;//Formodernbrowsersdocument.body.scrollTop=0;//Forolderbrowsers*///强制body置顶,}}目前只找到这种方法,这种......