有没有一种简单的方法打印出bean属性值?不需要通过获取propertyDescriptors等复杂的内省结构。我说的是在开发过程中测试和检查所有属性是否具有正确的值。
PropertyDescriptors是解决问题的方法,但如果使用BeanWrapper接口,Spring会让使用它们变得更加容易。
这是一个愚蠢的测试类:
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]
阅读以下内容以供参考:
BeanPostProcessor 可能会对您有所帮助。postProcessBeforeInitialization() 方法将在每个 bean 初始化时被调用,您可以在其中打印属性的值。
后处理器类:
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:
<bean class="ExampleBeanPostProcessor " />
对于一行代码可以使用 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>
添加自定义<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)