내성 방식 으로 자바 빈 을 조작 하 다.

5416 단어 자바
내성,영어 로 introspector 라 고 합 니 다.주로 자바 빈 을 조작 합 니 다.자바 빈 은 특수 한 자바 류 입 니 다.이 유형의 방법 명 은 특정한 규칙(사실은 getXXX,setXXX)에 부합 합 니 다.우 리 는 보통 get,set 방법 으로 속성의 이름 을 추측 합 니 다.속성 에 따라 이름 을 얻 는 것 이 아니 라 속성 이 모두 개인 적 인 것 이기 때문에 get,set 방법 은 모두 공유 합 니 다.추정 규칙:두 번 째 자모 가 소문 자 라면 이니셜 소문 자,예 를 들 어:
  • getAge—>age
  • setage—>age

  • 방법 명 에 따라 속성 명 을 추정 하 는 것 이 매우 번 거 롭 기 때문에 우 리 는 내성 적 인 방식 으로 set,get 방법 을 호출 하여 아래 의 예 를 볼 수 있 습 니 다.
        @Test
        public void test4() {
            Person p1 = new Person();
            Object value = "zhangsan";
            String propertyName = "username";
    
            try {
                //       
                setProperty(p1, value, propertyName);
                //      
                System.out.println(getProperty(p1, propertyName));
            } catch (IllegalAccessException | IllegalArgumentException
                    | InvocationTargetException | IntrospectionException e) {
                e.printStackTrace();
            }
        }
    
        private Object getProperty(Object p1, String propertyName)
                throws IntrospectionException, IllegalAccessException,
                IllegalArgumentException, InvocationTargetException {
            PropertyDescriptor pd1 = new PropertyDescriptor(propertyName,
                    p1.getClass());
            Method methodGetProperty = pd1.getReadMethod();
            return methodGetProperty.invoke(p1);
        }
    
        private void setProperty(Object p1, Object value, String propertyName)
                throws IntrospectionException, IllegalAccessException,
                IllegalArgumentException, InvocationTargetException {
            PropertyDescriptor pd1 = new PropertyDescriptor(propertyName,
                    p1.getClass());
            Method methodSetProperty = pd1.getWriteMethod();
            methodSetProperty.invoke(p1, value);
        }

    Person.java
    public class Person {
    
        private String username;
        private String password;
        private int money;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getMoney() {
            return money;
        }
        public void setMoney(int money) {
            this.money = money;
        }
    
    }

    자바 빈 에서 제공 하 는 BeanInfo 클래스 를 사용 하여 조작 하 는 것 은 약간 번 거 롭 지만 실현 방식 이기 도 합 니 다.
        private Object getProperty(Object p1, String propertyName)
                throws IntrospectionException, IllegalAccessException,
                IllegalArgumentException, InvocationTargetException {
            /*PropertyDescriptor pd1 = new PropertyDescriptor(propertyName,
                    p1.getClass());
            Method methodGetProperty = pd1.getReadMethod();
            return methodGetProperty.invoke(p1);*/
            BeanInfo beanInfo = Introspector.getBeanInfo(p1.getClass());
            PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
            for(PropertyDescriptor pd : pds){
                if(pd.getName().equals(propertyName)){
                    Method methodGetProperty = pd.getReadMethod();
                    return methodGetProperty.invoke(p1);
                }
            }
            return null;
        }

    다음으로 전송:https://www.cnblogs.com/qitian1/p/6461871.html

    좋은 웹페이지 즐겨찾기