From f620991fb0525bfa520a3f00fb6c3c95e3015749 Mon Sep 17 00:00:00 2001 From: mrbird <852252810@qq.com> Date: Wed, 13 Mar 2019 18:26:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B1=E5=85=A5=E5=AD=A6=E4=B9=A0Spring=20Bo?= =?UTF-8?q?ot=E8=87=AA=E5=8A=A8=E8=A3=85=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 44.Spring-Boot-Autoconfiguration/pom.xml | 43 +++++++++++++++++++ .../com/example/demo/DemoApplication.java | 13 ++++++ .../demo/annotation/EnableHelloWorld.java | 17 ++++++++ .../demo/annotation/FirstLevelService.java | 14 ++++++ .../demo/annotation/SecondLevelService.java | 11 +++++ .../EnableAutoConfigurationBootstrap.java | 22 ++++++++++ .../demo/bootstrap/ServiceBootstrap.java | 23 ++++++++++ .../demo/bootstrap/TestEnableBootstap.java | 21 +++++++++ .../HelloWorldAutoConfiguration.java | 14 ++++++ .../HelloWorldConfiguration.java | 16 +++++++ .../selector/HelloWorldImportSelector.java | 15 +++++++ .../com/example/demo/service/TestService.java | 11 +++++ .../main/resources/META-INF/spring.factories | 3 ++ .../src/main/resources/application.properties | 1 + .../example/demo/DemoApplicationTests.java | 16 +++++++ 15 files changed, 240 insertions(+) create mode 100644 44.Spring-Boot-Autoconfiguration/pom.xml create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/DemoApplication.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/EnableHelloWorld.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/FirstLevelService.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/SecondLevelService.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/EnableAutoConfigurationBootstrap.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/ServiceBootstrap.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/TestEnableBootstap.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldAutoConfiguration.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldConfiguration.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/selector/HelloWorldImportSelector.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/service/TestService.java create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/resources/META-INF/spring.factories create mode 100644 44.Spring-Boot-Autoconfiguration/src/main/resources/application.properties create mode 100644 44.Spring-Boot-Autoconfiguration/src/test/java/com/example/demo/DemoApplicationTests.java diff --git a/44.Spring-Boot-Autoconfiguration/pom.xml b/44.Spring-Boot-Autoconfiguration/pom.xml new file mode 100644 index 0000000..90bffc7 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.0.RELEASE + + + com.example + autoconfig + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/DemoApplication.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..094d95b --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/EnableHelloWorld.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/EnableHelloWorld.java new file mode 100644 index 0000000..9e25edd --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/EnableHelloWorld.java @@ -0,0 +1,17 @@ +package com.example.demo.annotation; + +import com.example.demo.configuration.HelloWorldConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +/** + * @author MrBird + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +// @Import(HelloWorldImportSelector.class) +@Import(HelloWorldConfiguration.class) +public @interface EnableHelloWorld { +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/FirstLevelService.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/FirstLevelService.java new file mode 100644 index 0000000..17ee7af --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/FirstLevelService.java @@ -0,0 +1,14 @@ +package com.example.demo.annotation; + +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Service +public @interface FirstLevelService { + String value() default ""; +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/SecondLevelService.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/SecondLevelService.java new file mode 100644 index 0000000..3c5a2f2 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/annotation/SecondLevelService.java @@ -0,0 +1,11 @@ +package com.example.demo.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@FirstLevelService +public @interface SecondLevelService { + String value() default ""; +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/EnableAutoConfigurationBootstrap.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/EnableAutoConfigurationBootstrap.java new file mode 100644 index 0000000..1b091c9 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/EnableAutoConfigurationBootstrap.java @@ -0,0 +1,22 @@ +package com.example.demo.bootstrap; + +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +/** + * @author MrBird + */ +@EnableAutoConfiguration +public class EnableAutoConfigurationBootstrap { + + public static void main(String[] args) { + ConfigurableApplicationContext context = new SpringApplicationBuilder(EnableAutoConfigurationBootstrap.class) + .web(WebApplicationType.NONE) + .run(args); + String hello = context.getBean("hello", String.class); + System.out.println("hello Bean: " + hello); + context.close(); + } +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/ServiceBootstrap.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/ServiceBootstrap.java new file mode 100644 index 0000000..e5095c6 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/ServiceBootstrap.java @@ -0,0 +1,23 @@ +package com.example.demo.bootstrap; + +import com.example.demo.service.TestService; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.ComponentScan; + +/** + * @author MrBird + */ +@ComponentScan("com.example.demo.service") +public class ServiceBootstrap { + + public static void main(String[] args) { + ConfigurableApplicationContext context = new SpringApplicationBuilder(ServiceBootstrap.class) + .web(WebApplicationType.NONE) + .run(args); + TestService testService = context.getBean("testService", TestService.class); + System.out.println("TestService Bean: " + testService); + context.close(); + } +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/TestEnableBootstap.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/TestEnableBootstap.java new file mode 100644 index 0000000..0bd12bb --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/TestEnableBootstap.java @@ -0,0 +1,21 @@ +package com.example.demo.bootstrap; + +import com.example.demo.annotation.EnableHelloWorld; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; + +/** + * @author MrBird + */ +@EnableHelloWorld +public class TestEnableBootstap { + public static void main(String[] args) { + ConfigurableApplicationContext context = new SpringApplicationBuilder(TestEnableBootstap.class) + .web(WebApplicationType.NONE) + .run(args); + String hello = context.getBean("hello", String.class); + System.out.println("hello Bean: " + hello); + context.close(); + } +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldAutoConfiguration.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldAutoConfiguration.java new file mode 100644 index 0000000..846c818 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldAutoConfiguration.java @@ -0,0 +1,14 @@ +package com.example.demo.configuration; + +import com.example.demo.annotation.EnableHelloWorld; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; + +/** + * @author MrBird + */ +@Configuration +@EnableHelloWorld +@ConditionalOnProperty(name = "helloworld", havingValue = "true") +public class HelloWorldAutoConfiguration { +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldConfiguration.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldConfiguration.java new file mode 100644 index 0000000..3595ee2 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldConfiguration.java @@ -0,0 +1,16 @@ +package com.example.demo.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author MrBird + */ +@Configuration +public class HelloWorldConfiguration { + + @Bean + public String hello() { + return "hello world"; + } +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/selector/HelloWorldImportSelector.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/selector/HelloWorldImportSelector.java new file mode 100644 index 0000000..3bbf03e --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/selector/HelloWorldImportSelector.java @@ -0,0 +1,15 @@ +package com.example.demo.selector; + +import com.example.demo.configuration.HelloWorldConfiguration; +import org.springframework.context.annotation.ImportSelector; +import org.springframework.core.type.AnnotationMetadata; + +/** + * @author MrBird + */ +public class HelloWorldImportSelector implements ImportSelector { + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + return new String[]{HelloWorldConfiguration.class.getName()}; + } +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/service/TestService.java b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/service/TestService.java new file mode 100644 index 0000000..2d94f37 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/service/TestService.java @@ -0,0 +1,11 @@ +package com.example.demo.service; + +import com.example.demo.annotation.FirstLevelService; +import com.example.demo.annotation.SecondLevelService; + +/** + * @author MrBird + */ +@SecondLevelService +public class TestService { +} diff --git a/44.Spring-Boot-Autoconfiguration/src/main/resources/META-INF/spring.factories b/44.Spring-Boot-Autoconfiguration/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..c2345c4 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +# Auto Configure +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.example.demo.configuration.HelloWorldAutoConfiguration \ No newline at end of file diff --git a/44.Spring-Boot-Autoconfiguration/src/main/resources/application.properties b/44.Spring-Boot-Autoconfiguration/src/main/resources/application.properties new file mode 100644 index 0000000..96fe056 --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/main/resources/application.properties @@ -0,0 +1 @@ +helloworld=true diff --git a/44.Spring-Boot-Autoconfiguration/src/test/java/com/example/demo/DemoApplicationTests.java b/44.Spring-Boot-Autoconfiguration/src/test/java/com/example/demo/DemoApplicationTests.java new file mode 100644 index 0000000..480d1ca --- /dev/null +++ b/44.Spring-Boot-Autoconfiguration/src/test/java/com/example/demo/DemoApplicationTests.java @@ -0,0 +1,16 @@ +package com.example.demo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class DemoApplicationTests { + + @Test + public void contextLoads() { + } + +}