java - java中如何通过反射调用setter方法

标签 java spring

如何在java中通过反射调用Bean私有(private)setter方法

我无法理解如何在我的用户 Bean 中调用私有(private) setter 方法。 我已经准备好使用 PropertyDescriptor 和多种方式,但我无法访问私有(private) 通过反射设置方法。

public class GetterAndSetter
 {
     public static void main(String[] args)
     {
         GetterAndSetter gs = new GetterAndSetter();
         User user = new User();

          try {
            gs.callSetter(user,"name","Sanket");
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IntrospectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

     }

     private void callSetter(Object obj,String fieldName, Object value) throws IntrospectionException, InvocationTargetException, IllegalAccessException , IllegalArgumentException
     {
         PropertyDescriptor pd;

         pd = new PropertyDescriptor(fieldName,obj.getClass());
         pd.getWriteMethod().invoke(obj,value);
     }

 }

这段代码我只会访问字段并设置字段中的值,但我不能 直接访问Reflection的setter Field

最佳答案

这是如何调用 User 类中的私有(private)方法:

try {
    User user = new User();
    Method method = User.class.getDeclaredMethod("setName", String.class);
    method.setAccessible(true);
    method.invoke(user, "Some name");
    System.out.println("user.getName() = " + user.getName());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
    e.printStackTrace();
}

注意对 method.setAccessible(true); 的调用

关于java - java中如何通过反射调用setter方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54049322/

相关文章:

java - "main"(java)的必要性

java.io.IOException : mark/reset not supported

java - 基于HTTP方法自定义Spring MVC requestBody映射?

java - RestTemplate:有没有办法保护 jvm 免受巨大响应大小的影响?

mysql - Java Spring应用程序中从Oracle迁移到MySQL : Connection Pooling

java - 如何在JDK 1.6中使JFrame透明?

c# - ORM/如何处理Domain对象和Persistent对象的对应关系?

java - 当 header 看起来正确时,为什么 Springframework 返回空主体?

java - Spring - 删除验证错误?

java - 跨多线程的 Spring bean 引用