2015-05-06 37 views
0

工作,我有一個implementsBeanPostProcessor爲什麼範圍原型不爲春豆,它實現的BeanPostProcessor

public class ScopeTest implements BeanPostProcessor { 

    public ScopeTest() { 
     System.out.println("ScopeTest()"); 
    } 

    public Object postProcessBeforeInitialization(Object bean, String beanName) 
      throws BeansException { 
     System.out.println("postProcessBeforeInitialization()"); 
     return null; 
    } 

    public Object postProcessAfterInitialization(Object bean, String beanName) 
      throws BeansException { 
     System.out.println("postProcessAfterInitialization()"); 
     return null; 
    } 
} 

,我已經在Spring bean配置文件,如scope配置prototype它。

<bean id="st" class="com.test.ScopeTest" scope="prototype" /> 

和我運行使用ApplicationContext

public class App { 
    public static void main(String[] args) { 
     ApplicationContext container = new ClassPathXmlApplicationContext("spring.xml"); 
    } 
} 

和我觀察到的輸出代碼是

ScopeTest() 

這裏什麼使容器以創建其被標記爲豆的對象prototype沒有getBean()

回答

1

原型範圍在此不起作用,因爲BeanPostProcessor實現僅在Spring應用程序上下文啓動時被發現,實例化和註冊。這些bean按類型(在實例化之前/之後等)進行排序並存儲在列表中。從那裏,PostProcessor bean將應用於更多的bean創建。與「普通」bean(如服務bean)相比,它們在啓動後第二次不會從上下文中被重新獲取。所以他們的範圍並沒有被考慮。

+0

我從Spring Reference發現了這些行。 ** ApplicationContext自動檢測在實現BeanPostProcessor接口的配置元數據中定義的任何Bean。** – TSKSwamy