diff --git a/spring-boot/dependency-injection/pom.xml b/spring-boot/dependency-injection/pom.xml new file mode 100644 index 0000000..e30a3b2 --- /dev/null +++ b/spring-boot/dependency-injection/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + com.example + Example + 0.0.1-SNAPSHOT + Example + Demo project for dependency injection + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.mockito + mockito-core + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + 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 new file mode 100644 index 0000000..081ed8a --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationCI.java @@ -0,0 +1,22 @@ +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 { + + 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()); + } + +} 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 new file mode 100644 index 0000000..2a5000c --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/ExampleApplicationSI.java @@ -0,0 +1,22 @@ +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; + +@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()); + } + +} 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 new file mode 100644 index 0000000..1d9c212 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/constructorinjection/Cake.java @@ -0,0 +1,38 @@ +package com.example.constructorinjection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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) { + this.flavor = flavor; + LOGGER.info("Flavor from Constructor Injection : " + flavor); + } else { + throw new IllegalArgumentException("Cake cannot be created with null flavor object"); + } + } + + 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/dependency/Flavor.java b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java new file mode 100644 index 0000000..8167c10 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Flavor.java @@ -0,0 +1,25 @@ +package com.example.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class Flavor { + + String flavorType = " Chocolate "; + String color = " White "; + + public String getFlavorType() { + return flavorType; + } + + public String getColor() { + return color; + } + + @Override + public String toString() { + return "Flavor [flavorType=" + flavorType + ", color=" + color + "]"; + } + + +} 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 new file mode 100644 index 0000000..7ad79a1 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/dependency/Topping.java @@ -0,0 +1,24 @@ +package com.example.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class Topping { + + private String toppingName; + + public String getToppingName() { + return toppingName; + } + + public void setToppingName(String toppingName) { + this.toppingName = toppingName; + } + + @Override + public String toString() { + return "Topping [toppingName=" + toppingName + "]"; + } + + +} diff --git a/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cake.java b/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cake.java new file mode 100644 index 0000000..039f6b7 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/java/com/example/setterinjection/Cake.java @@ -0,0 +1,50 @@ +package com.example.setterinjection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.example.dependency.Flavor; +import com.example.dependency.Topping; + +@Component +public class Cake { + + private Logger LOGGER = LoggerFactory.getLogger(Cake.class); + + private Flavor flavor; + + @Autowired + private Topping toppings; + + public Cake() { + LOGGER.info("Flavor from setter Injection : " + this.flavor); + } + + @Autowired + public void setFlavor(Flavor flavor) { + LOGGER.info("Initialising flavor object using setter injection"); + this.flavor = flavor; + } + + public Flavor getFlavor() { + return flavor; + } + + public Topping getToppings() { + return toppings; + } + + public void setToppings(Topping toppings) { + this.toppings = toppings; + } + + @Override + public String toString() { + return "Cake [LOGGER=" + LOGGER + ", flavor=" + flavor + ", toppings=" + toppings + "]"; + } + + + +} diff --git a/spring-boot/dependency-injection/src/main/resources/application.properties b/spring-boot/dependency-injection/src/main/resources/application.properties new file mode 100644 index 0000000..9660361 --- /dev/null +++ b/spring-boot/dependency-injection/src/main/resources/application.properties @@ -0,0 +1,2 @@ +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 new file mode 100644 index 0000000..9afe0ae --- /dev/null +++ b/spring-boot/dependency-injection/src/test/java/com/example/test/constructorinjection/TestCakeClassConstructorInjection.java @@ -0,0 +1,25 @@ +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.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.example.ExampleApplicationCI; +import com.example.constructorinjection.Cake; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = ExampleApplicationCI.class) +public class TestCakeClassConstructorInjection { + + @Autowired + Cake cake; + + @Test + public void testConstructorInjection() { + String testColor=cake.getFlavor().getColor(); + Assert.assertEquals(testColor, " White "); + } +} diff --git a/spring-boot/dependency-injection/src/test/java/com/example/test/setterinjection/TestCakeClassSetterInjection.java b/spring-boot/dependency-injection/src/test/java/com/example/test/setterinjection/TestCakeClassSetterInjection.java new file mode 100644 index 0000000..e54dc6c --- /dev/null +++ b/spring-boot/dependency-injection/src/test/java/com/example/test/setterinjection/TestCakeClassSetterInjection.java @@ -0,0 +1,32 @@ +package com.example.test.setterinjection; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.example.ExampleApplicationSI; +import com.example.setterinjection.Cake; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = ExampleApplicationSI.class) +public class TestCakeClassSetterInjection { + + @Autowired + Cake cake; + + @Test + public void testSetterInjection() { + String testColor = cake.getFlavor().getColor(); + Assert.assertEquals(testColor, " White "); + String toppingsName=cake.getToppings().getToppingName(); + + //check if the dependency is not null + if(toppingsName!=null) { + Assert.assertEquals(toppingsName, "gems"); + } + + } +}