From 4b959cb797b819548d9739c20a096baba9556397 Mon Sep 17 00:00:00 2001 From: Vasudha Venkatesan Date: Tue, 10 Mar 2020 10:55:35 +0530 Subject: [PATCH] Code example for field injection and other changes --- .../com/example/ExampleApplicationCI.java | 11 +++---- .../com/example/ExampleApplicationFI.java | 19 +++++++++++ .../com/example/ExampleApplicationSI.java | 15 ++++----- .../example/constructorinjection/Cake.java | 20 +++++------- .../constructorinjection/Sandwich.java | 32 +++++++++++++++++++ .../java/com/example/dependency/Bread.java | 17 ++++++++++ .../java/com/example/dependency/Flavor.java | 11 +++---- .../java/com/example/dependency/Pizza.java | 26 +++++++++++++++ .../java/com/example/dependency/Topping.java | 5 ++- .../com/example/fieldinjection/IceCream.java | 27 ++++++++++++++++ .../com/example/setterinjection/Cookie.java | 27 ++++++++++++++++ .../src/main/resources/application.properties | 2 -- .../TestCakeClassConstructorInjection.java | 11 ++++--- .../TestCookieClassFieldInjection.java | 25 +++++++++++++++ 14 files changed, 205 insertions(+), 43 deletions(-) create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationFI.java create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Sandwich.java create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/dependency/Bread.java create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/dependency/Pizza.java create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/fieldinjection/IceCream.java create mode 100644 spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cookie.java create mode 100644 spring-boot/dependency-injection/src/test/java/com/example/test/fieldinjection/TestCookieClassFieldInjection.java diff --git a/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationCI.java b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationCI.java index 081ed8a..fd9d088 100644 --- a/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationCI.java +++ b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationCI.java @@ -1,22 +1,19 @@ package com.example; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import com.example.constructorinjection.Cake; -@SpringBootApplication(scanBasePackages= {"com.example.constructorinjection","com.example.dependency"}) -public class ExampleApplicationCI { +@SpringBootApplication(scanBasePackages = { "com.example.constructorinjection", "com.example.dependency" }) +public class ExampleApplicationCI { - private static Logger LOGGER=LoggerFactory.getLogger(ExampleApplicationCI.class); public static void main(String[] args) { - + ApplicationContext context = SpringApplication.run(ExampleApplicationCI.class, args); Cake obj = context.getBean(Cake.class); - LOGGER.info("Cake : "+ obj.toString()); + System.out.println("Cake : " + obj.toString()); } } diff --git a/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationFI.java b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationFI.java new file mode 100644 index 0000000..249e59f --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationFI.java @@ -0,0 +1,19 @@ +package com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; + +import com.example.fieldinjection.IceCream; + +@SpringBootApplication(scanBasePackages = { "com.example.dependency", "com.example.fieldinjection" }) +public class ExampleApplicationFI { + + public static void main(String[] args) { + + ApplicationContext context = SpringApplication.run(ExampleApplicationSI.class, args); + IceCream obj = context.getBean(IceCream.class); + System.out.println("IceCream : " + obj.toString()); + } + +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationSI.java b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationSI.java index 2a5000c..40ee3e8 100644 --- a/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationSI.java +++ b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationSI.java @@ -1,22 +1,19 @@ package com.example; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; -import com.example.setterinjection.Cake; +import com.example.setterinjection.Cookie; -@SpringBootApplication(scanBasePackages= {"com.example.setterinjection","com.example.dependency"}) -public class ExampleApplicationSI { +@SpringBootApplication(scanBasePackages = { "com.example.setterinjection", "com.example.dependency", }) +public class ExampleApplicationSI { - private static Logger LOGGER=LoggerFactory.getLogger(ExampleApplicationSI.class); public static void main(String[] args) { - + ApplicationContext context = SpringApplication.run(ExampleApplicationSI.class, args); - Cake obj = context.getBean(Cake.class); - LOGGER.info("Cake : "+ obj.toString()); + Cookie obj = context.getBean(Cookie.class); + System.out.println("Cookie : " + obj.toString()); } } diff --git a/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Cake.java b/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Cake.java index 1d9c212..1622df3 100644 --- a/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Cake.java +++ b/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Cake.java @@ -1,26 +1,21 @@ package com.example.constructorinjection; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.Objects; + import org.springframework.stereotype.Component; import com.example.dependency.Flavor; - @Component public class Cake { - private static Logger LOGGER = LoggerFactory.getLogger(Cake.class); - - private Flavor flavor; - public Cake(Flavor flavor) throws IllegalAccessException { - - //check if the required dependency is not null - if (flavor != null) { + Cake(Flavor flavor) { + + // check if the required dependency is not null + if (Objects.requireNonNull(flavor) != null) { this.flavor = flavor; - LOGGER.info("Flavor from Constructor Injection : " + flavor); } else { throw new IllegalArgumentException("Cake cannot be created with null flavor object"); } @@ -29,10 +24,11 @@ public class Cake { public Flavor getFlavor() { return flavor; } - + @Override public String toString() { return "Cake [flavor=" + flavor + "]"; } + } diff --git a/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Sandwich.java b/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Sandwich.java new file mode 100644 index 0000000..2ad7f64 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Sandwich.java @@ -0,0 +1,32 @@ +package com.example.constructorinjection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.example.dependency.Bread; +import com.example.dependency.Topping; + +@Component +public class Sandwich { + + Topping toppings; + Bread breadType; + + Sandwich(Topping toppings) { + this.toppings = toppings; + } + + @Autowired + Sandwich(Topping toppings, Bread breadType) { + this.toppings = toppings; + this.breadType = breadType; + } + + public Topping getToppings() { + return toppings; + } + + public Bread getBreadType() { + return breadType; + } +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Bread.java b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Bread.java new file mode 100644 index 0000000..8e83142 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Bread.java @@ -0,0 +1,17 @@ +package com.example.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class Bread { + + String breadType; + + public String getBreadType() { + return breadType; + } + + void setBreadType(String breadType) { + this.breadType = breadType; + } +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java index 8167c10..8a11187 100644 --- a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java @@ -4,14 +4,14 @@ import org.springframework.stereotype.Component; @Component public class Flavor { - - String flavorType = " Chocolate "; - String color = " White "; - + + String flavorType; + String color; + public String getFlavorType() { return flavorType; } - + public String getColor() { return color; } @@ -20,6 +20,5 @@ public class Flavor { public String toString() { return "Flavor [flavorType=" + flavorType + ", color=" + color + "]"; } - } diff --git a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Pizza.java b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Pizza.java new file mode 100644 index 0000000..632ae94 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Pizza.java @@ -0,0 +1,26 @@ +package com.example.dependency; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Pizza { + + @Autowired + Topping toppings; + + Pizza(Topping toppings) { + this.toppings = toppings; + } + + @Autowired + public Topping getToppings() { + System.out.println("Using field injection - " + this.toppings); + return toppings; + } + + public void setToppings(Topping toppings) { + this.toppings = toppings; + } + +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Topping.java b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Topping.java index 7ad79a1..5d0b567 100644 --- a/spring-boot/dependency-injection/src/main/java/com/example/dependency/Topping.java +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Topping.java @@ -5,13 +5,13 @@ import org.springframework.stereotype.Component; @Component public class Topping { - private String toppingName; + String toppingName; public String getToppingName() { return toppingName; } - public void setToppingName(String toppingName) { + void setToppingName(String toppingName) { this.toppingName = toppingName; } @@ -20,5 +20,4 @@ public class Topping { return "Topping [toppingName=" + toppingName + "]"; } - } diff --git a/spring-boot/dependency-injection/src/main/java/com/example/fieldinjection/IceCream.java b/spring-boot/dependency-injection/src/main/java/com/example/fieldinjection/IceCream.java new file mode 100644 index 0000000..3d4d1bc --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/fieldinjection/IceCream.java @@ -0,0 +1,27 @@ +package com.example.fieldinjection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.example.dependency.Topping; + +@Component +public class IceCream { + + @Autowired + Topping toppings; + + public Topping getToppings() { + return toppings; + } + + void setToppings(Topping toppings) { + this.toppings = toppings; + } + + @Override + public String toString() { + return "IceCream [toppings=" + toppings + "]"; + } + +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cookie.java b/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cookie.java new file mode 100644 index 0000000..a1e3c0c --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cookie.java @@ -0,0 +1,27 @@ +package com.example.setterinjection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.example.dependency.Topping; + +@Component +public class Cookie { + + private Topping toppings; + + @Autowired + void setTopping(Topping toppings) { + this.toppings = toppings; + } + + public Topping getTopping() { + return toppings; + } + + @Override + public String toString() { + return "Cookie [toppings=" + toppings + "]"; + } + +} diff --git a/spring-boot/dependency-injection/src/main/resources/application.properties b/spring-boot/dependency-injection/src/main/resources/application.properties index 9660361..e69de29 100644 --- a/spring-boot/dependency-injection/src/main/resources/application.properties +++ b/spring-boot/dependency-injection/src/main/resources/application.properties @@ -1,2 +0,0 @@ -spring.main.web-application-type=none -spring.main.banner-mode=off diff --git a/spring-boot/dependency-injection/src/test/java/com/example/test/constructorinjection/TestCakeClassConstructorInjection.java b/spring-boot/dependency-injection/src/test/java/com/example/test/constructorinjection/TestCakeClassConstructorInjection.java index c6eb3d3..6513343 100644 --- a/spring-boot/dependency-injection/src/test/java/com/example/test/constructorinjection/TestCakeClassConstructorInjection.java +++ b/spring-boot/dependency-injection/src/test/java/com/example/test/constructorinjection/TestCakeClassConstructorInjection.java @@ -3,7 +3,7 @@ package com.example.test.constructorinjection; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; +import org.mockito.InjectMocks; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -14,12 +14,15 @@ import com.example.constructorinjection.Cake; @SpringBootTest(classes = ExampleApplicationCI.class) public class TestCakeClassConstructorInjection { - @Autowired +// @Mock +// Flavor flavor; + + @InjectMocks Cake cake; @Test public void testConstructorInjection() { - String testColor = cake.getFlavor().getColor(); - Assert.assertEquals(testColor, " White "); + System.out.println(cake.toString()); + Assert.assertNotNull(cake.getFlavor()); } } diff --git a/spring-boot/dependency-injection/src/test/java/com/example/test/fieldinjection/TestCookieClassFieldInjection.java b/spring-boot/dependency-injection/src/test/java/com/example/test/fieldinjection/TestCookieClassFieldInjection.java new file mode 100644 index 0000000..6a1a2ca --- /dev/null +++ b/spring-boot/dependency-injection/src/test/java/com/example/test/fieldinjection/TestCookieClassFieldInjection.java @@ -0,0 +1,25 @@ +package com.example.test.fieldinjection; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.example.ExampleApplicationSI; +import com.example.fieldinjection.IceCream; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = ExampleApplicationSI.class) +public class TestCookieClassFieldInjection { + + @InjectMocks + IceCream iceCream; + + @Test + public void testSetterInjection() { + System.out.println(iceCream.toString()); + Assert.assertNotNull(iceCream.getToppings()); + } +}