2009-10-21 40 views
1

說我有下面bean定義:Java中,春天 - 記錄bean屬性

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="maxActive" value="50"/> 
    <property name="maxIdle" value="5"/> 

有沒有辦法讓Spring記錄所有,它已設置的屬性(沒有啓用詳細在log4j中記錄Spring)。我沿線的思考的東西...詳細= 「真」

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" verbose="true"> 

更新

我用下面的,如回答提示:

public class SpringBeanLoggingPostProcessor implements BeanPostProcessor { 
    private static final Logger log = Logger.getLogger(SpringBeanLoggingPostProcessor.class); 
    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 

     if (bean.getClass() == org.apache.commons.dbcp.BasicDataSource.class) { 
      BasicDataSource ds = (BasicDataSource) bean; 
      log.info("url="+ds.getUrl()); 
      log.info("username="+ds.getUsername()); 
     } 

     return bean; 
    } 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String arg1) throws BeansException { 
     return bean; 
    } 
} 

回答

2

不,沒有這樣的設施。您可以創建一個專門的bean後期處理器來記錄目標bean的屬性。