spring @Enable 模組驅動
阿新 • • 發佈:2019-06-02
@Enable...
基於spring 3.1
@Enable...系列可以實現按需載入整個模組,從而達到簡化配置的目的。我們以@EnableCaching
為例子
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({CachingConfigurationSelector.class}) public @interface EnableCaching { boolean proxyTargetClass() default false; AdviceMode mode() default AdviceMode.PROXY; int order() default 2147483647; }
所以魔法就在 @Import這裡,@Import可以匯入Configuration class, ImportSelector,ImportBeanDefinationRegister的實現類,至少申明一個@Bean方法的類,並將它們註冊為bean。
Configuration Import方式
在上一篇中<context:component-scan/>
會將需要spring 註冊的bean定義為BeanDefination。然後交由不同的bean. parser.
spring3. 之後由ConfigurationClassPostProcessor
來處理@Configuration @Bean and @Component. 其中 ConfigurationClassParser.processConfigurationClass(ConfigurationClass)
// 載入註解對應的處理器
<context:annotation-config/>
<context:component-scan base-package="com.xxx"/>
ImportSelector 和 ImportBeanDefinitionRegistrar 方式
這兩種方式可以做更多的自定義操作。
總結
所以在spring framework時代,@Component ,@Configuration 需要被裝載時,應用需要藉助@Import 或者@ComponentScan 的能力, 也是我們通常需要通過@ComponentScan 掃描對應預設的包路徑。
這樣存在的問題:
- 會掃描所有的jar包
- 在裝配一些複雜Bean的時候,無能為力。
所以催生出了spring b