2009-05-20 136 views
8

當使用AspectJ時,爲什麼使用@Component over @Configurable。可配置與組件與Spring和AspectJ

我已經爲@Transactional支持,自我調用的方面以及注入到JPA實體的Spring和AspectJ設置。這很好。

我對大多數需要注入的類使用@Component,因此要麼將它們注入到它們的依賴項中。或者,當我不能時,注入ApplicationContext,然後使用getBean()作爲最後的手段。而且,我僅爲需要注入的JPA實體(Hibernate)保留@Configurable。我還開始使用@Configurable進行jUnit測試,以便簡化寫作測試。這也很好。

但我很好奇。如果AspectJ現在使用@Configurable註解自動注入(beanization)任何東西,不管它是如何構造的; getBean(),new(),@Autowired。爲什麼我不能只爲所有的bean使用@Configurable?然後,我可以完全取消應用程序上下文和getBean(),只是new()我不能注入的任何類。

我意識到我沒有提到XML bean配置。我不迴避,但這個項目並不需要任何。我只是構造函數或setter在測試時注入依賴項。好簡單。

回答

1

爲什麼你不應該總是使用@Configurable的一個原因是它增加了很多開銷:啓動應用程序通常需要更長的時間,創建新實例變得更慢。

對於@Component根本不需要它,因爲通常所有實例都由Spring管理。

12

@Component是一個Spring標記接口,它可以在Spring自動檢測bean時提供Spring線索。

@Configurable是由AOP加載時織造材料使用的標記。

這兩者並沒有太大的關係。例如,

6

@Component適用於Spring自身實例化的類,而@Configurable適用於將由您自己的代碼或其他框架實例化的類 - 例如由Hibernate或Servlet容器實例化的實例。