Java / Spring распечатывает значения свойств бина - PullRequest
4 голосов
/ 22 сентября 2010

У кого-нибудь есть простой способ распечатать значения свойств бина?Без сложных конструкций самонаблюдения посредством получения propertyDescriptors и т. Д. Я говорю о тестировании и проверке правильности всех свойств во время разработки.

Ответы [ 5 ]

6 голосов
/ 22 сентября 2010

PropertyDescriptors - лучший способ, но Spring упрощает их использование, если вы используете интерфейс 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 голосов
/ 05 февраля 2014

Добавить пользовательский <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) 
0 голосов
/ 16 апреля 2012

Для одного вкладыша можно использовать библиотеку 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 голосов
/ 22 сентября 2010

BeanPostProcessor может вам помочь.Метод 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 class="ExampleBeanPostProcessor " />
0 голосов
...