2010-09-22 111 views
4

有沒有人有打印出bean屬性值的簡單方法?沒有通過獲取propertyDescriptors等複雜的內省構造。我正在談論測試和檢查,在開發過程中所有屬性都有正確的值。java/spring打印出bean屬性值

回答

6

的PropertyDescriptor是要走的路,但春季使得使用起來方便很多,如果你使用BeanWrapper接口。

這是一個愚蠢的測試類:

public class Thingy{ 
    private final String foo = "hey"; 
    private final int bar = 123; 
    private final List<String> grr = Arrays.asList("1", "2", "3"); 

    public String getFoo(){ 
     return this.foo; 
    } 
    public int getBar(){ 
     return this.bar; 
    } 
    public List<String> getGrr(){ 
     return this.grr; 
    } 
} 

下面是檢查它的一個實例的主要方法:

public static void main(final String[] args) throws Exception{ 
    final Thingy thingy = new Thingy(); 
    final BeanWrapper wrapper = new BeanWrapperImpl(thingy); 
    for(final PropertyDescriptor descriptor : wrapper.getPropertyDescriptors()){ 
     System.out.println(descriptor.getName() + ":" 
      + descriptor.getReadMethod().invoke(thingy)); 
    } 
} 

輸出:

bar:123 
class:class com.mypackage.Thingy 
foo:hey 
grr:[1, 2, 3] 

閱讀本以供參考:

+0

謝謝seanizer,那就是我一直在尋找的東西。 – lisak 2010-09-22 12:08:13

+0

我完全按照你所說的去做了。這是豆http://pastebin.com/242qAqHD。只有「progress」屬性沒有設置,否則其餘的bean屬性已經完全用數據初始化。結果是「progress:」,「movement:null」,「startingPos:null」....因此,爲了移動和啓動Pos出了問題... – lisak 2010-09-22 14:11:55

+0

@lisak這很奇怪。檢查了這一點:http://pastebin.com/Y7NmRdNi當我執行這個,屬性是 – 2010-09-22 14:23:16

0

BeanPostProcessor也許能夠幫助你。每個bean初始化都會調用postProcessBeforeInitialization()方法,您可以在其中打印屬性值。

後處理器類:

public class ExampleBeanPostProcessor implements BeanPostProcessor { 
    public Object postProcessBeforeInitialization(Object bean, String beanName) 
     throws BeansException { 
     if (bean instanceof YourBean) 
      System.out.println((YourBean) bean).getSomeProp()); 
     return bean; 
    } 
    public Object postProcessAfterInitialization(Object bean, String beanName) 
     throws BeansException { 
     return bean; 
    } 
} 

申報豆在Bean文件:

<bean class="ExampleBeanPostProcessor " /> 
+0

你可能沒看過我的問題的最後一句話。 – lisak 2010-09-23 12:00:27

0

對於一個襯墊可以使用gson庫。

new Gson().toJson(myObject) 

對Maven:

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.1</version> 
    <scope>test</scope> <!-- remove you use gson in production --> 
</dependency> 
0

添加自定義<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

其中

@Override 
    protected String resolvePlaceholder(String placeholder, Properties props) 

@Override 
    protected String resolvePlaceholder(String placeholder, Properties props, int    systemPropertiesMode) 

    @Override 
    protected String resolveSystemProperty(String key)