복붙노트

[SPRING] 자바에서 반사에 의해 setter 메서드를 호출하는 방법

SPRING

자바에서 반사에 의해 setter 메서드를 호출하는 방법

Java에서 리플렉션으로 Bean 개인 설정 메소드를 호출하는 방법

My User Bean에서 개인 설정 메소드를 호출하는 방법을 이해할 수 없습니다. 나는 모두 준비 PropertyDescriptor 및 여러 가지 방법으로하지만 난 개인 액세스하지 오전  Reflection에 의한 setter 메소드.

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);
     }

 }

이 코드에서는 파일에만 액세스하고 필드에 값을 설정하지만, setter 필드에 직접 리플렉션에 액세스

해결법

  1. ==============================

    1.User 클래스에서 private 메서드를 호출하는 방법은 다음과 같습니다.

    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)에 대한 호출에 유의하십시오.

  2. from https://stackoverflow.com/questions/54049322/how-to-invoke-setter-method-by-reflection-in-java by cc-by-sa and MIT license