diff --git a/spring-core-order-annotation/pom.xml b/spring-core-order-annotation/pom.xml
new file mode 100644
index 0000000..7d5703e
--- /dev/null
+++ b/spring-core-order-annotation/pom.xml
@@ -0,0 +1,68 @@
+
+
+
+ spring-framework-tutorial-parent
+ com.jstobigdata
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ spring-core-order-annotation
+ Use of Spring's @Order annotation
+
+
+
+
+ org.springframework
+ spring-core
+
+
+
+ org.springframework
+ spring-context
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+
+ org.springframework
+ spring-test
+ test
+
+
+
+
+
+
+ com.jstobigdata
+ spring-tutorial-boms
+ pom
+ import
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M3
+
+
+
+
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/ApplicationConfig.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/ApplicationConfig.java
new file mode 100644
index 0000000..8b0b03b
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/ApplicationConfig.java
@@ -0,0 +1,43 @@
+package com.jsbd.order;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+import com.jsbd.order.model.NotificationChannel;
+
+@Configuration
+@ComponentScan("com.jsbd.order")
+public class ApplicationConfig {
+
+
+ @Bean
+ @Order(2)
+ public NotificationChannel email(){
+ // System.out.println("Notification Channel - Email");
+ return new NotificationChannel("Email");
+ }
+
+ @Bean
+ @Order(4)
+ public NotificationChannel twitter(){
+ // System.out.println("Notification Channel - Twitter");
+ return new NotificationChannel("Twitter");
+ }
+
+ @Bean
+ @Order(3)
+ public NotificationChannel slack(){
+ // System.out.println("Notification Channel - Slack");
+ return new NotificationChannel("Slack");
+ }
+
+ @Bean
+ @Order(1)
+ public NotificationChannel sms(){
+ // System.out.println("Notification Channel - Sms");
+ return new NotificationChannel("Sms");
+ }
+
+}
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/model/NotificationChannel.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/model/NotificationChannel.java
new file mode 100644
index 0000000..0f434b6
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/model/NotificationChannel.java
@@ -0,0 +1,14 @@
+package com.jsbd.order.model;
+
+public class NotificationChannel {
+
+ private String name;
+
+ public NotificationChannel(String channelName) {
+ this.name = channelName;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/service/EmailNotification.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/EmailNotification.java
new file mode 100644
index 0000000..6db6e40
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/EmailNotification.java
@@ -0,0 +1,19 @@
+package com.jsbd.order.service;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+@Order(3)
+public class EmailNotification implements NotificationHandler {
+
+ public EmailNotification() {
+ System.out.println("EmailNotification Service Created.");
+ }
+
+ @Override
+ public void send() {
+ System.out.println("Email Notification Handler");
+ }
+
+}
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/service/NotificationHandler.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/NotificationHandler.java
new file mode 100644
index 0000000..abfb29e
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/NotificationHandler.java
@@ -0,0 +1,5 @@
+package com.jsbd.order.service;
+
+public interface NotificationHandler {
+ void send();
+}
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SlackNotification.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SlackNotification.java
new file mode 100644
index 0000000..444669d
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SlackNotification.java
@@ -0,0 +1,19 @@
+package com.jsbd.order.service;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+@Order(2)
+class SlackNotification implements NotificationHandler {
+
+ public SlackNotification() {
+ System.out.println("SlackNotification Service created.");
+ }
+
+ @Override
+ public void send() {
+ System.out.println("Slack Notification Handler");
+ }
+
+}
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SmsNotification.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SmsNotification.java
new file mode 100644
index 0000000..57a5bfd
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/SmsNotification.java
@@ -0,0 +1,19 @@
+package com.jsbd.order.service;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+@Order(1)
+class SmsNotification implements NotificationHandler {
+
+ public SmsNotification() {
+ System.out.println("SmsNotification Service created.");
+ }
+
+ @Override
+ public void send() {
+ System.out.println("SMS Notification Handler");
+ }
+
+}
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/main/java/com/jsbd/order/service/TwitterNotification.java b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/TwitterNotification.java
new file mode 100644
index 0000000..980f7cb
--- /dev/null
+++ b/spring-core-order-annotation/src/main/java/com/jsbd/order/service/TwitterNotification.java
@@ -0,0 +1,18 @@
+package com.jsbd.order.service;
+
+import org.springframework.stereotype.Service;
+
+@Service
+// Not an Ordered Service, will be the last in sequence
+class TwitterNotification implements NotificationHandler {
+
+ public TwitterNotification() {
+ System.out.println("TwitterNotification Service created.");
+ }
+
+ @Override
+ public void send() {
+ System.out.println("Twitter Direct Message Notification Handler");
+ }
+
+}
\ No newline at end of file
diff --git a/spring-core-order-annotation/src/test/java/com/jsbd/order/TestOrderOnCollectionInjection.java b/spring-core-order-annotation/src/test/java/com/jsbd/order/TestOrderOnCollectionInjection.java
new file mode 100644
index 0000000..c4fe573
--- /dev/null
+++ b/spring-core-order-annotation/src/test/java/com/jsbd/order/TestOrderOnCollectionInjection.java
@@ -0,0 +1,31 @@
+package com.jsbd.order;
+
+import java.util.List;
+
+import com.jsbd.order.model.NotificationChannel;
+import com.jsbd.order.service.NotificationHandler;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+@SpringJUnitConfig(ApplicationConfig.class)
+public class TestOrderOnCollectionInjection {
+
+ @Autowired
+ private List notificationHandlers;
+
+ @Autowired
+ private List notificationChannels;
+
+ @Test
+ public void testAllChannelSendingOrder() {
+ notificationHandlers.forEach(NotificationHandler::send);
+ }
+
+ @Test
+ public void testNotificationChannelBeanOrder(){
+ notificationChannels.forEach(channel -> System.out.println(channel.getName()));
+ }
+
+}