(轉)Spring Boot(一)
阿新 • • 發佈:2018-10-16
new lec 一行 查看 resource 熱啟動 傳統 gmv 其中
(二期)4、springboot的綜合講解
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions><!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency><!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
@SpringBootApplication
public class SpringBootDeepinApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDeepinApplication.class, args);
}
}
SpringApplication application = new SpringApplication(SpringBootDeepinApplication.class);
#加載Spring.favorites中ApplicationContextInitializer的配置類
this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
#加載Spring.favorites中ApplicationListener的配置類
this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
#配置加載器,包括註解配置或xml配置
BeanDefinitionLoader
框架實現
Spring Framework
Spring Boot
Spring Cloud
1、基於註解驅動實現,可參考@EnableWebMvc註解
第一步
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({SayHelloWorldConfiguration.class})
public @interface EnableSayHelloWorld {
}
第二步
//@Configuration
public class SayHelloWorldConfiguration {
@Bean
SayHelloWorld sayHelloWorld() {
System.out.println("here to loading bean sayhelloworld!");
return new SayHelloWorld();
}
}
//需要初始化的bean
public class SayHelloWorld {
public String say() {
return "hello world";
}
}
第三步
@EnableSayHelloWorld
@SpringBootApplication
public class SpringBootDeepinApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDeepinApplication.class, args);
}
}
2、基於接口驅動實現,參考@EnableCaching註解
第一步、
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({HelloWorldImportSeletor.class})
public @interface EnableSeletorHelloWorld {
String model() default "first";
}
第二步、
public class HelloWorldImportSeletor implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//獲取註解上的屬性的值
Map<String, Object> annotationAttributes = annotationMetadata.getAnnotationAttributes(EnableSeletorHelloWorld.class.getName());
String model = (String) annotationAttributes.get("model");
System.out.println(model);
//可以返回多個加載的配置或bean
return new String[]{SayHelloWorldConfiguration.class.getName()};
}
}
1、註解方式
2、編程方式
第一步
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnSystemPropertyCondition.class})
public @interface ConditionalOnSystemProperty {
String value();
}
public class OnSystemPropertyCondition implements Condition {
/**
* 判斷是否滿足條件
* @param conditionContext
* @param annotatedTypeMetadata 註解的元信息
* @return
*/
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Map<String, Object> attrs = annotatedTypeMetadata.getAnnotationAttributes(ConditionalOnSystemProperty.class.getName());
String system = String.valueOf(attrs.get("value"));
String currentOs = System.getProperty("os.name");
return currentOs.endsWith(system);
}
}
@ConditionalOnSystemProperty(value = "linux")
Java SPI是什麽?
Java SPI的約定
SpringBoot中的SPI機制
理念
裝配
步驟
加載類SpringFactoriesLoader說明:
配置文件META-INF/spring.factories說明:
@Configuration
@ConditionalOnWebApplication(
type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
...
}
第一步
@Configuration
@ConditionalOnSystemProperty(value = "Windows 10")
@EnableSeletorHelloWorld
public class SayHelloWorldAutoConfiguration {
@Bean
SayHelloWorld autoSayHelloWorld() {
System.out.println("here to !!auto!! loading bean autoSayHelloWorld!");
return new SayHelloWorld();
}
}
第二步
# Auto Configure 自動裝配自定義的配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.other.configuration.SayHelloWorldAutoConfiguration
(轉)Spring Boot(一)