diff --git a/spring-core/src/main/java/com/baelding/injectiontypes/BeanDefinition.java b/spring-core/src/main/java/com/baelding/injectiontypes/BeanDefinition.java new file mode 100644 index 0000000000..931e193fc4 --- /dev/null +++ b/spring-core/src/main/java/com/baelding/injectiontypes/BeanDefinition.java @@ -0,0 +1,15 @@ +package com.baelding.injectiontypes; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class BeanDefinition { + + @Bean + public UsefulBean usefulBean() { + UsefulBean usefulBean = new UsefulBean("Hello", "Injection"); + return usefulBean; + } + +} diff --git a/spring-core/src/main/java/com/baelding/injectiontypes/ConstructorInjection.java b/spring-core/src/main/java/com/baelding/injectiontypes/ConstructorInjection.java new file mode 100644 index 0000000000..ed0f66ecff --- /dev/null +++ b/spring-core/src/main/java/com/baelding/injectiontypes/ConstructorInjection.java @@ -0,0 +1,20 @@ +package com.baelding.injectiontypes; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ConstructorInjection { + + private UsefulBean usefulBean; + + @Autowired + public ConstructorInjection(UsefulBean usefulBean) { + this.usefulBean = usefulBean; + } + + public String getParameters() { + return "Using constructor injection, we got these parameters " + usefulBean.getParameters(); + } + +} diff --git a/spring-core/src/main/java/com/baelding/injectiontypes/FieldInjection.java b/spring-core/src/main/java/com/baelding/injectiontypes/FieldInjection.java new file mode 100644 index 0000000000..632ccdd865 --- /dev/null +++ b/spring-core/src/main/java/com/baelding/injectiontypes/FieldInjection.java @@ -0,0 +1,16 @@ +package com.baelding.injectiontypes; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FieldInjection { + + @Autowired + private UsefulBean usefulBean; + + public String getParameters() { + return "Using field injection, we got these parameters " + usefulBean.getParameters(); + } + +} diff --git a/spring-core/src/main/java/com/baelding/injectiontypes/SetterInjection.java b/spring-core/src/main/java/com/baelding/injectiontypes/SetterInjection.java new file mode 100644 index 0000000000..02565caaf9 --- /dev/null +++ b/spring-core/src/main/java/com/baelding/injectiontypes/SetterInjection.java @@ -0,0 +1,20 @@ +package com.baelding.injectiontypes; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class SetterInjection { + + private UsefulBean usefulBean; + + @Autowired + public void setUsefulBean(UsefulBean usefulBean) { + this.usefulBean = usefulBean; + } + + public String getParameters() { + return "Using setter injection, we got these parameters " + usefulBean.getParameters(); + } + +} diff --git a/spring-core/src/main/java/com/baelding/injectiontypes/UsefulBean.java b/spring-core/src/main/java/com/baelding/injectiontypes/UsefulBean.java new file mode 100644 index 0000000000..0b414952c7 --- /dev/null +++ b/spring-core/src/main/java/com/baelding/injectiontypes/UsefulBean.java @@ -0,0 +1,17 @@ +package com.baelding.injectiontypes; + +public class UsefulBean { + + private String firstParameter; + private String secondParameter; + + public UsefulBean(String firstParameter, String secondParameter) { + this.firstParameter = firstParameter; + this.secondParameter = secondParameter; + } + + public String getParameters() { + return firstParameter + "-" + secondParameter; + } + +} diff --git a/spring-core/src/test/java/com/baeldung/injectiontypes/TypesOfInjectionTest.java b/spring-core/src/test/java/com/baeldung/injectiontypes/TypesOfInjectionTest.java new file mode 100644 index 0000000000..807e14842b --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/injectiontypes/TypesOfInjectionTest.java @@ -0,0 +1,39 @@ +package com.baeldung.injectiontypes; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baelding.injectiontypes.BeanDefinition; +import com.baelding.injectiontypes.ConstructorInjection; +import com.baelding.injectiontypes.FieldInjection; +import com.baelding.injectiontypes.SetterInjection; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = {BeanDefinition.class, ConstructorInjection.class, SetterInjection.class, FieldInjection.class}) +public class TypesOfInjectionTest { + + @Autowired + private ConstructorInjection constructorInjection; + + @Autowired + private FieldInjection fieldInjection; + + @Autowired + private SetterInjection setterInjection; + + @Test + public void givenWiredDependencies_WhenExecutingGetBean_ThenDependenciesShouldBeAlreadyInjected() { + assertEquals("Using constructor injection, we got these parameters Hello-Injection",constructorInjection.getParameters()); + assertEquals("Using field injection, we got these parameters Hello-Injection",fieldInjection.getParameters()); + assertEquals("Using setter injection, we got these parameters Hello-Injection",setterInjection.getParameters()); + } + +}