2009-10-21 3 views
2

는 어떻게 빈으로 간단한 자바 객체에 액세스 할 수 있습니까?빈과 같은 POJO를 어떻게 처리 할 수 ​​있습니까?

public boolean checkSettings(Object obj) { 
    // pseudocode here 
    Bean bean = new Bean(obj); 
    if("hello".equals(bean.getAttribute("foo")) { 
     return true; 
    } 
    return false; 
} 
: 나는 방법 checkSettings(Object obj)의 구현을 찾고 있어요 그래서

Simple simple = new Simple(); 
simple.setFoo("hello"); 

checkSettings(simple); 

:

class Simple { 
    private String foo; 
    String getFoo() { 
     return foo; 
    } 
    private void setFoo(String foo) { 
     this.foo = foo; 
    } 
} 

지금 나는이 같은이 객체를 사용하려면 : 예를 들어

자바 언어는 coul 같은 소리 java.beans라는 패키지가 포함 도와 줘. 그러나 나는 좋은 출발점을 찾지 못한다.

힌트가 있습니까?

+1

죄송하지만이 질문은 나에게 이해가되지 않습니다. 빈이란 단순히 public no-args ctor와 get/set 메쏘드를 가진 클래스이다. –

+0

getter를 명시 적으로 호출하고 싶지 않습니다. 나는'checkSettings()'메서드처럼 인터페이스와 같은 빈을 사용하고 싶다. – tangens

+0

나는 아직도 혼란 스럽다. 표시된 Bean 인터페이스는 내가 말할 수있는 한 Java Beans가 될 수있는 것이 아닙니다. –

답변

2

java.beans.Introspector.getBeanInfo 차례 (그리고 getMethodDescriptors -methods의 getPropertyDescriptors를 통해) PropertyDescriptor들과 MethodDescriptor의를 가져올 수 있습니다 java.beans.BeanInfo를 구현하는 객체를 얻을 수 있습니다.

은 정말 반사를 사용하는 것보다 적은 노력하지 않습니다.

+0

이제 PropertyDescriptor가 생겼습니다. 주어진 객체의 속성을 읽기 위해 어떻게 사용할 수 있습니까? – tangens

+0

알았어요. 'value = PropertyDescriptor.getReadMethod.invoke (object)'. 약간 복잡하지만, 아파치 beanutils보다 더 유연하다. 감사. – tangens

6

난 당신이 찾고있는 기능이 아파치 - 평민의 BeanUtils 클래스의 하나와 유사한 생각 :

http://commons.apache.org/beanutils/

이 BeanUtils의 getProperty에() 메소드를 살펴 보자. 결과적으로 당신이 실제로 원하는 정보를 얻을 수 있습니다 -

0

위의 질문에 언급했듯이 나는 당신이 원하는 것을 아직 확신하지 못한다. 그러나 객체를 감싸고 싶다는 소리가 들리면 &이 getAttribute로 인터페이스로 설정된다. 이것은 내가 "콩"이라고 생각하는 것이 아닙니다.

interface Thingie { 
    Object getAttribute(String attribute); 
} 

당신은 반사를 사용하는의 구현을 작성해야 :

그래서 당신은 인터페이스를 가지고있다.

class Thingie { 
    Object wrapped; 

    public Object getAttribute(String attribute) throws Exception { 
     Method[] methods = wrapped.getClass().getMethods(); 
     for(Method m : methods) { 
     if (m.getName().equalsIgnoreCase("get"+attribute)) { 
      return m.invoke(wrapped); 
     } 
     } 
    } 
} 
+0

'isFoo'는'foo'라는 부울 속성의 유효한 이름이고'GetFoo'는 getter의 유효한 이름이 아니며'getFoo (int index)'는 Bean 게터가 아닙니다., and, and , ... 기본적으로 Bean 스펙은 매우 구체적이며이 코드는 아주 작은 하위 세트 만 구현합니다. –

관련 문제