diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjections/AppConfig.java b/spring-core/src/main/java/com/baeldung/dependencyinjections/AppConfig.java new file mode 100644 index 000000000000..54234cb21d68 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjections/AppConfig.java @@ -0,0 +1,23 @@ +package com.baeldung.dependencyinjections; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AppConfig { + + @Bean + public WebsiteControllerConstructorInjection websiteControllerConstructorInjection() { + return new WebsiteControllerConstructorInjection(homepageService()); + } + + @Bean + public HomepageService homepageService() { + return new HomepageService(); + } + + @Bean + public WebsiteControllerSetterInjection websiteControllerSetterInjection() { + return new WebsiteControllerSetterInjection(); + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjections/HomepageService.java b/spring-core/src/main/java/com/baeldung/dependencyinjections/HomepageService.java new file mode 100644 index 000000000000..d1a54b837623 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjections/HomepageService.java @@ -0,0 +1,11 @@ +package com.baeldung.dependencyinjections; + +import org.springframework.stereotype.Service; + +@Service +public class HomepageService { + + public String getContents() { + return "Home page contents"; + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjections/Website.java b/spring-core/src/main/java/com/baeldung/dependencyinjections/Website.java new file mode 100644 index 000000000000..bf6eb945fd87 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjections/Website.java @@ -0,0 +1,19 @@ +package com.baeldung.dependencyinjections; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Website { + + @SuppressWarnings("resource") + public static void main(String[] args) { + + ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); + + WebsiteControllerConstructorInjection controller = context.getBean(WebsiteControllerConstructorInjection.class); + System.out.println("The contents of the Website includes : " + controller.getContentsViaConstructorInjection()); + + WebsiteControllerSetterInjection controllerwithSetterInjection = (WebsiteControllerSetterInjection) context.getBean("websiteControllerSetterInjection"); + System.out.println("The contents of the Website includes : " + controllerwithSetterInjection.getContentsViaSetterInjection()); + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerConstructorInjection.java b/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerConstructorInjection.java new file mode 100644 index 000000000000..1bfeccb151f3 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerConstructorInjection.java @@ -0,0 +1,20 @@ +package com.baeldung.dependencyinjections; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class WebsiteControllerConstructorInjection { + + private HomepageService homeService; + + @Autowired + public WebsiteControllerConstructorInjection(HomepageService homeService) { + this.homeService = homeService; + } + + public String getContentsViaConstructorInjection() { + return homeService.getContents(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerSetterInjection.java b/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerSetterInjection.java new file mode 100644 index 000000000000..ac4e93f0cdac --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjections/WebsiteControllerSetterInjection.java @@ -0,0 +1,19 @@ +package com.baeldung.dependencyinjections; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class WebsiteControllerSetterInjection { + + private HomepageService homeService; + + @Autowired + public void setHomepageService(HomepageService homeService) { + this.homeService = homeService; + } + + public String getContentsViaSetterInjection() { + return homeService.getContents(); + } +} diff --git a/spring-core/src/main/resources/dependencyinjections-context.xml b/spring-core/src/main/resources/dependencyinjections-context.xml new file mode 100644 index 000000000000..972bf92f439e --- /dev/null +++ b/spring-core/src/main/resources/dependencyinjections-context.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/dependencyinjections/WebsiteTest.java b/spring-core/src/test/java/com/baeldung/dependencyinjections/WebsiteTest.java new file mode 100644 index 000000000000..d87c6a1d5e95 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/dependencyinjections/WebsiteTest.java @@ -0,0 +1,41 @@ +package com.baeldung.dependencyinjections; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class WebsiteTest { + + ApplicationContext annotationContext = new AnnotationConfigApplicationContext(AppConfig.class); + ApplicationContext xmlContext = new ClassPathXmlApplicationContext("dependencyinjections-context.xml"); + + public static final String EXPECTED_STRING = "Home page contents"; + + @Test + public void testAnnotationConfigConstructorBasedDI() { + WebsiteControllerConstructorInjection controller = annotationContext.getBean(WebsiteControllerConstructorInjection.class); + assertEquals(EXPECTED_STRING, controller.getContentsViaConstructorInjection()); + } + + @Test + public void testXMLConfigConstructorBasedDI() { + WebsiteControllerConstructorInjection controller = xmlContext.getBean(WebsiteControllerConstructorInjection.class); + assertEquals(EXPECTED_STRING, controller.getContentsViaConstructorInjection()); + } + + @Test + public void testAnnotationConfigSetterBasedDI() { + WebsiteControllerSetterInjection controllerwithSetterInjection = (WebsiteControllerSetterInjection) annotationContext.getBean("websiteControllerSetterInjection"); + assertEquals(EXPECTED_STRING, controllerwithSetterInjection.getContentsViaSetterInjection()); + } + + @Test + public void testXMLConfigSetterBasedDI() { + WebsiteControllerSetterInjection controllerwithSetterInjection = (WebsiteControllerSetterInjection) xmlContext.getBean("websiteControllerSetterInjection"); + assertEquals(EXPECTED_STRING, controllerwithSetterInjection.getContentsViaSetterInjection()); + } + +}