diff --git a/Chapter1-2-1/pom.xml b/Chapter1-2-1/pom.xml
new file mode 100644
index 0000000..e4500f8
--- /dev/null
+++ b/Chapter1-2-1/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+ com.didispace
+ Chapter1-2-1
+ 1.0.0
+ jar
+
+ Chapter1-2-1
+ Spring Boot 2.0 features : Application Events and Listeners
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.RELEASE
+
+
+
+
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/Chapter1-2-1/src/main/java/com/didispace/Application.java b/Chapter1-2-1/src/main/java/com/didispace/Application.java
new file mode 100755
index 0000000..bcfd43a
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/Application.java
@@ -0,0 +1,31 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+
+@Slf4j
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+ @Bean
+ public DataLoader dataLoader() {
+ return new DataLoader();
+ }
+
+ @Slf4j
+ static class DataLoader implements CommandLineRunner {
+
+ @Override
+ public void run(String... strings) throws Exception {
+ log.info("Loading data...");
+ }
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationEnvironmentPreparedEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationEnvironmentPreparedEventListener.java
new file mode 100644
index 0000000..da2a47c
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationEnvironmentPreparedEventListener.java
@@ -0,0 +1,15 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationEnvironmentPreparedEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
+ log.info("......ApplicationEnvironmentPreparedEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationFailedEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationFailedEventListener.java
new file mode 100644
index 0000000..457ff47
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationFailedEventListener.java
@@ -0,0 +1,15 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.event.ApplicationFailedEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationFailedEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationFailedEvent event) {
+ log.info("......ApplicationFailedEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationPreparedEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationPreparedEventListener.java
new file mode 100644
index 0000000..5b52961
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationPreparedEventListener.java
@@ -0,0 +1,15 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.event.ApplicationPreparedEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationPreparedEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationPreparedEvent event) {
+ log.info("......ApplicationPreparedEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationReadyEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationReadyEventListener.java
new file mode 100644
index 0000000..9193a75
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationReadyEventListener.java
@@ -0,0 +1,15 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationReadyEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationReadyEvent event) {
+ log.info("......ApplicationReadyEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartedEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartedEventListener.java
new file mode 100644
index 0000000..3b47eba
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartedEventListener.java
@@ -0,0 +1,16 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationStartedEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationStartedEvent event) {
+ log.info("......ApplicationStartedEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartingEventListener.java b/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartingEventListener.java
new file mode 100644
index 0000000..effcb14
--- /dev/null
+++ b/Chapter1-2-1/src/main/java/com/didispace/ApplicationStartingEventListener.java
@@ -0,0 +1,15 @@
+package com.didispace;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.event.ApplicationStartingEvent;
+import org.springframework.context.ApplicationListener;
+
+@Slf4j
+public class ApplicationStartingEventListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationStartingEvent event) {
+ log.info("......ApplicationStartingEvent......");
+ }
+
+}
diff --git a/Chapter1-2-1/src/main/resources/META-INF/spring.factories b/Chapter1-2-1/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..15177da
--- /dev/null
+++ b/Chapter1-2-1/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,6 @@
+org.springframework.context.ApplicationListener=com.didispace.ApplicationEnvironmentPreparedEventListener,\
+ com.didispace.ApplicationFailedEventListener,\
+ com.didispace.ApplicationPreparedEventListener,\
+ com.didispace.ApplicationReadyEventListener,\
+ com.didispace.ApplicationStartedEventListener,\
+ com.didispace.ApplicationStartingEventListener
\ No newline at end of file
diff --git a/Chapter1-2-1/src/main/resources/application.properties b/Chapter1-2-1/src/main/resources/application.properties
new file mode 100755
index 0000000..e69de29
diff --git a/README.md b/README.md
index 09a7ef9..653f86b 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,8 @@
**新特性详解**
-- [Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析](http://localhost:4000/Spring-Boot-2-0-feature-1-relaxed-binding-2/)
+- [Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析](http://blog.didispace.com/Spring-Boot-2-0-feature-1-relaxed-binding-2/)
+- [Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent](http://blog.didispace.com/Spring-Boot-2-0-feature-2-ApplicationStartedEvent/)
## Spring Boot 基础教程(基于1.3.x-1.5.x)