方式1:引入某個jar 包就能自動初始化某些bean
1.需要在resource/META-INF 下創建一個 名爲 spring.factories
的文件,並指定配置類型如
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.activiti.spring.boot.EagleScheduleAutoConfigure,\
org.activiti.spring.boot.EndpointAutoConfiguration,\
org.activiti.spring.boot.RestApiAutoConfiguration,\
org.activiti.spring.boot.JpaProcessEngineAutoConfiguration,\
org.activiti.spring.boot.SecurityAutoConfiguration
EagleScheduleAutoConfigure
@Configuration
@ComponentScan
@EnableScheduling
public class EagleScheduleAutoConfigure {
}
方式2:引入jar 包後,使用註解開啓如 @Enablexxx
自定義註解如 @EnableSomeBeans
在其中使用@Import
引用配置如:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(SomeBeanConfiguration.class)
@interface EnableSomeBeans {}
@Configuration
class SomeBeanConfiguration {
@Bean
public String aBean1() {
return "aBean1";
}
@Bean
public String aBean2() {
return "aBean2";
}
}
帶Selector的Enable註解
當然,Enable註解可以更加複雜,可以根據所在上下文來激活不同類型的bean。比如:EnableCaching,可以根據類路徑上的不同實現來激活對應的緩存。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(SomeBeanConfigurationSelector.class)
public @interface EnableSomeBeansSelector {
String criteria() default "default";
}
mport org.springframework.context.annotation.ImportSelector;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;
public class SomeBeanConfigurationSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
AnnotationAttributes attributes =
AnnotationAttributes.fromMap(
importingClassMetadata.getAnnotationAttributes(EnableSomeBeansSelector.class.getName(), false));
String criteria = attributes.getString("criteria");
if (criteria.equals("default")) {
return new String[]{"enableannot.selector.SomeBeanConfigurationDefault"};
}else {
return new String[]{"enableannot.selector.SomeBeanConfigurationType1"};
}
}
}
@Configuration
class SomeBeanConfigurationType1 {
@Bean
public String aBean() {
return "Type1";
}
}
@Configuration
class SomeBeanConfigurationDefault {
@Bean
public String aBean() {
return "Default";
}
}
可能常用到的註解
- @EnableConfigurationProperties(DemoProperties.class)
- @ConfigurationProperties(prefix = "demo")
- @ComponentScan( basePackages = {"springfox.documentation.swagger2.mappers"} )
- @ComponentScans
- @Import({SpringfoxWebMvcConfiguration.class, SwaggerCommonConfiguration.class})
- @AutoConfigureBefore(DataSourceAutoConfiguration.class)
- @AutoConfigureAfter({ HttpMessageConvertersAutoConfiguration.class, JacksonAutoConfiguration.class })
- @ConditionalOnProperty( prefix = "demo", name = "isopen", havingValue = "true" )
- @ConditionalOnClass(DruidDataSource.class)
- @ConditionalOnWebApplication
- @ConditionalOnMissingBean