From 05446fb887c488d11e3944cd1e3ed7f5b0f1b8eb Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:24:34 +0530 Subject: [PATCH 1/7] JAVA-628: Moved 3 articles from spring-core --- spring-core/README.md | 4 +- .../com/baeldung/lombok/ApologizeService.java | 22 --------- .../com/baeldung/lombok/FarewellService.java | 18 -------- .../com/baeldung/lombok/GreetingService.java | 15 ------- .../com/baeldung/lombok/ThankingService.java | 15 ------- .../java/com/baeldung/lombok/Translator.java | 5 --- ...pplicationContextTestResourceNameType.java | 16 ------- ...plicationContextTestResourceQualifier.java | 22 --------- ...ogizeServiceAutowiringIntegrationTest.java | 33 -------------- .../ApologizeServiceIntegrationTest.java | 21 --------- .../FarewellAutowiringIntegrationTest.java | 31 ------------- .../FarewellServiceIntegrationTest.java | 20 --------- .../GreetingServiceIntegrationTest.java | 37 --------------- .../java/com/baeldung/lombok/TestConfig.java | 17 ------- ...nkingServiceAutowiringIntegrationTest.java | 31 ------------- .../ThankingServiceIntegrationTest.java | 20 --------- ...FieldResourceInjectionIntegrationTest.java | 30 ------------- ...hodByQualifierResourceIntegrationTest.java | 45 ------------------- .../MethodByTypeResourceIntegrationTest.java | 34 -------------- ...ethodResourceInjectionIntegrationTest.java | 34 -------------- .../NamedResourceIntegrationTest.java | 29 ------------ ...ifierResourceInjectionIntegrationTest.java | 42 ----------------- ...etterResourceInjectionIntegrationTest.java | 33 -------------- 23 files changed, 1 insertion(+), 573 deletions(-) delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/FarewellService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/GreetingService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/ThankingService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/Translator.java delete mode 100644 spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java delete mode 100644 spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/TestConfig.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java diff --git a/spring-core/README.md b/spring-core/README.md index 1f3dcb783b..b8d46f6b34 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -3,10 +3,8 @@ This module contains articles about core Spring functionality ### Relevant Articles: -- [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) -- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) + - [Introduction to Spring’s StreamUtils](https://www.baeldung.com/spring-stream-utils) -- [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](https://www.baeldung.com/spring-bean-name-factory-aware) - [Access a File from the Classpath in a Spring Application](https://www.baeldung.com/spring-classpath-file-access) diff --git a/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java b/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java deleted file mode 100644 index 76c3df8217..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.lombok; - -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ApologizeService { - - private final Translator translator; - private final String message; - - @Autowired - public ApologizeService(Translator translator) { - this(translator, "sorry"); - } - - public String apologize() { - return translator.translate(message); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java b/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java deleted file mode 100644 index 4e8c4993cb..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class FarewellService { - - private final Translator translator; - - public FarewellService(Translator translator) { - this.translator = translator; - } - - public String farewell() { - return translator.translate("bye"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java b/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java deleted file mode 100644 index 0e03e177e1..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class GreetingService { - - @Autowired - private Translator translator; - - public String greet() { - return translator.translate("hello"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java b/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java deleted file mode 100644 index 2e0c398d2d..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.lombok; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ThankingService { - - private final Translator translator; - - public String thank() { - return translator.translate("thank you"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/Translator.java b/spring-core/src/main/java/com/baeldung/lombok/Translator.java deleted file mode 100644 index 2dea20b726..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/Translator.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.lombok; - -public interface Translator { - String translate(String input); -} diff --git a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java deleted file mode 100644 index cb1b5981e8..0000000000 --- a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; - -@Configuration -public class ApplicationContextTestResourceNameType { - - @Bean(name = "namedFile") - public File namedFile() { - File namedFile = new File("namedFile.txt"); - return namedFile; - } -} diff --git a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java deleted file mode 100644 index c9aa2f4a7d..0000000000 --- a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; - -@Configuration -public class ApplicationContextTestResourceQualifier { - - @Bean(name = "defaultFile") - public File defaultFile() { - File defaultFile = new File("defaultFile.txt"); - return defaultFile; - } - - @Bean(name = "namedFile") - public File namedFile() { - File namedFile = new File("namedFile.txt"); - return namedFile; - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java deleted file mode 100644 index a49dd84f11..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.lombok; - -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 static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class ApologizeServiceAutowiringIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Autowired - private ApologizeService apologizeService; - - @Autowired - private Translator translator; - - @Test - public void apologizeWithTranslatedMessage() { - when(translator.translate("sorry")).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizeService.apologize()); - } - -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java deleted file mode 100644 index 77f0c94299..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ApologizeServiceIntegrationTest { - - private final static String MESSAGE = "MESSAGE"; - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void apologizeWithCustomTranslatedMessage() { - Translator translator = mock(Translator.class); - ApologizeService apologizeService = new ApologizeService(translator, MESSAGE); - when(translator.translate(MESSAGE)).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizeService.apologize()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java deleted file mode 100644 index ec0793bd2e..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.lombok; - -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 static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class FarewellAutowiringIntegrationTest { - - @Autowired - private FarewellService farewellService; - - @Autowired - private Translator translator; - - @Test - public void sayByeWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("bye")).thenReturn(translated); - assertEquals(translated, farewellService.farewell()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java deleted file mode 100644 index 38959a511f..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class FarewellServiceIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void sayByeWithTranslatedMessage() { - Translator translator = mock(Translator.class); - when(translator.translate("bye")).thenReturn(TRANSLATED); - FarewellService farewellService = new FarewellService(translator); - assertEquals(TRANSLATED, farewellService.farewell()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java deleted file mode 100644 index 0516b5eb56..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.lombok; - -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 static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class GreetingServiceIntegrationTest { - - @Autowired - private GreetingService greetingService; - - @Autowired - private Translator translator; - - @Test - public void greetWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("hello")).thenReturn(translated); - assertEquals(translated, greetingService.greet()); - } - - @Test(expected = NullPointerException.class) - public void throwWhenInstantiated() { - GreetingService greetingService = new GreetingService(); - greetingService.greet(); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java b/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java deleted file mode 100644 index 3278a8188f..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import static org.mockito.Mockito.mock; - -@Configuration -@ComponentScan("com.baeldung.lombok") -class TestConfig { - - @Bean - public Translator mockTranslator() { - return mock(Translator.class); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java deleted file mode 100644 index fb9abbad46..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.lombok; - -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 static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class ThankingServiceAutowiringIntegrationTest { - - @Autowired - private ThankingService thankingService; - - @Autowired - private Translator translator; - - @Test - public void thankWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("thank you")).thenReturn(translated); - assertEquals(translated, thankingService.thank()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java deleted file mode 100644 index 680f926717..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ThankingServiceIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void thankWithTranslatedMessage() { - Translator translator = mock(Translator.class); - when(translator.translate("thank you")).thenReturn(TRANSLATED); - ThankingService thankingService = new ThankingService(translator); - assertEquals(TRANSLATED, thankingService.thank()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java deleted file mode 100644 index 63a25cb499..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class FieldResourceInjectionIntegrationTest { - - @Resource(name = "namedFile") - private File defaultFile; - - @Test - public void givenResourceAnnotation_WhenOnField_ThenDependencyValid() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java deleted file mode 100644 index f5bb9f10cf..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceQualifier; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceQualifier.class) -public class MethodByQualifierResourceIntegrationTest { - - private File arbDependency; - private File anotherArbDependency; - - @Test - public void givenResourceQualifier_WhenSetter_ThenValidDependencies() { - assertNotNull(arbDependency); - assertEquals("namedFile.txt", arbDependency.getName()); - assertNotNull(anotherArbDependency); - assertEquals("defaultFile.txt", anotherArbDependency.getName()); - } - - @Resource - @Qualifier("namedFile") - public void setArbDependency(File arbDependency) { - this.arbDependency = arbDependency; - } - - @Resource - @Qualifier("defaultFile") - public void setAnotherArbDependency(File anotherArbDependency) { - this.anotherArbDependency = anotherArbDependency; - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java deleted file mode 100644 index 171cbfea47..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class MethodByTypeResourceIntegrationTest { - - private File defaultFile; - - @Resource - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenSetter_ThenValidDependency() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java deleted file mode 100644 index 2e1c3c39a9..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class MethodResourceInjectionIntegrationTest { - - private File defaultFile; - - @Resource(name = "namedFile") - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenSetter_ThenDependencyValid() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java deleted file mode 100644 index d52660e9b8..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class NamedResourceIntegrationTest { - - @Resource(name = "namedFile") - private File testFile; - - @Test - public void givenResourceAnnotation_WhenOnField_THEN_DEPENDENCY_Found() { - assertNotNull(testFile); - assertEquals("namedFile.txt", testFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java deleted file mode 100644 index 3f812350c9..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceQualifier; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceQualifier.class) -public class QualifierResourceInjectionIntegrationTest { - - @Resource - @Qualifier("defaultFile") - private File dependency1; - - @Resource - @Qualifier("namedFile") - private File dependency2; - - @Test - public void givenResourceAnnotation_WhenField_ThenDependency1Valid() { - assertNotNull(dependency1); - assertEquals("defaultFile.txt", dependency1.getName()); - } - - @Test - public void givenResourceQualifier_WhenField_ThenDependency2Valid() { - assertNotNull(dependency2); - assertEquals("namedFile.txt", dependency2.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java deleted file mode 100644 index ae13b2336a..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class SetterResourceInjectionIntegrationTest { - - private File defaultFile; - - @Resource - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenOnSetter_THEN_MUST_INJECT_Dependency() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} From cf4ed21884090db86ff4b86ace4b506193b5a2c2 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:25:43 +0530 Subject: [PATCH 2/7] JAVA-628: Moved 4 articles from spring-core-2 --- spring-core-2/README.md | 4 - .../CustomAnnotationConfiguration.java | 9 -- .../baeldung/customannotation/DataAccess.java | 14 --- .../DataAccessAnnotationProcessor.java | 37 ------- .../DataAccessFieldCallback.java | 96 ------------------- .../baeldung/customannotation/GenericDAO.java | 30 ------ .../com/baeldung/customscope/TenantBean.java | 14 --- .../TenantBeanFactoryPostProcessor.java | 13 --- .../customscope/TenantBeansConfig.java | 21 ---- .../com/baeldung/customscope/TenantScope.java | 43 --------- .../customscope/TenantScopeConfig.java | 14 --- .../baeldung/sampleabstract/BallService.java | 28 ------ .../sampleabstract/BasketballService.java | 13 --- .../com/baeldung/sampleabstract/DemoApp.java | 18 ---- .../sampleabstract/LogRepository.java | 12 --- .../sampleabstract/RuleRepository.java | 12 --- .../startup/AllStrategiesExampleBean.java | 35 ------- .../startup/EventListenerExampleBean.java | 21 ---- .../startup/InitMethodExampleBean.java | 24 ----- .../startup/InitializingBeanExampleBean.java | 26 ----- .../startup/InvalidInitExampleBean.java | 18 ---- .../LogicInConstructorExampleBean.java | 22 ----- .../startup/PostConstructExampleBean.java | 27 ------ .../baeldung/startup/SpringStartupConfig.java | 9 -- .../StartupApplicationListenerExample.java | 22 ----- .../src/main/resources/startupConfig.xml | 16 ---- .../baeldung/customannotation/Account.java | 40 -------- .../customannotation/BeanWithGenericDAO.java | 18 ---- .../DataAccessAnnotationIntegrationTest.java | 57 ----------- ...ataAccessFieldCallbackIntegrationTest.java | 51 ---------- .../com/baeldung/customannotation/Person.java | 31 ------ .../TenantScopeIntegrationTest.java | 72 -------------- .../startup/SpringStartupIntegrationTest.java | 44 --------- ...SpringStartupXMLConfigIntegrationTest.java | 26 ----- 34 files changed, 937 deletions(-) delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java delete mode 100644 spring-core-2/src/main/resources/startupConfig.xml delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/Account.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/Person.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java diff --git a/spring-core-2/README.md b/spring-core-2/README.md index 10d3080b45..3c6bd05876 100644 --- a/spring-core-2/README.md +++ b/spring-core-2/README.md @@ -6,13 +6,9 @@ This module contains articles about core Spring functionality - [Guide to Spring @Autowired](http://www.baeldung.com/spring-autowire) - [Spring Profiles](http://www.baeldung.com/spring-profiles) -- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) - [Quick Guide to Spring Bean Scopes](http://www.baeldung.com/spring-bean-scopes) -- [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope) - [@Order in Spring](http://www.baeldung.com/spring-order) - [Spring @Primary Annotation](http://www.baeldung.com/spring-primary) - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) -- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) -- [Running Setup Data on Startup in Spring](https://www.baeldung.com/running-setup-logic-on-startup-in-spring) - More articles: [[<-- prev]](/spring-core)[[next -->]](/spring-core-3) diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java deleted file mode 100644 index 2e42a3f744..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("com.baeldung.customannotation") -public class CustomAnnotationConfiguration { -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java deleted file mode 100644 index 4160bad16d..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customannotation; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) -@Documented -public @interface DataAccess { - Class entity(); -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java deleted file mode 100644 index 27008176a8..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.stereotype.Component; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; - -@Component -public class DataAccessAnnotationProcessor implements BeanPostProcessor { - - private ConfigurableListableBeanFactory configurableListableBeanFactory; - - @Autowired - public DataAccessAnnotationProcessor(ConfigurableListableBeanFactory bf) { - configurableListableBeanFactory = bf; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - scanDataAccessAnnotation(bean, beanName); - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - protected void scanDataAccessAnnotation(Object bean, String beanName) { - Class managedBeanClass = bean.getClass(); - FieldCallback fcb = new DataAccessFieldCallback(configurableListableBeanFactory, bean); - ReflectionUtils.doWithFields(managedBeanClass, fcb); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java deleted file mode 100644 index 07b5298ea9..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.baeldung.customannotation; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; - -public final class DataAccessFieldCallback implements FieldCallback { - - private static Logger logger = LoggerFactory.getLogger(DataAccessFieldCallback.class); - private static int AUTOWIRE_MODE = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; - - private static String ERROR_ENTITY_VALUE_NOT_SAME = "@DataAccess(entity) " + "value should have same type with injected generic type."; - private static String WARN_NON_GENERIC_VALUE = "@DataAccess annotation assigned " + "to raw (non-generic) declaration. This will make your code less type-safe."; - private static String ERROR_CREATE_INSTANCE = "Cannot create instance of " + "type '{}' or instance creation is failed because: {}"; - - private ConfigurableListableBeanFactory configurableListableBeanFactory; - private Object bean; - - public DataAccessFieldCallback(final ConfigurableListableBeanFactory bf, final Object bean) { - configurableListableBeanFactory = bf; - this.bean = bean; - } - - @Override - public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { - if (!field.isAnnotationPresent(DataAccess.class)) { - return; - } - ReflectionUtils.makeAccessible(field); - final Type fieldGenericType = field.getGenericType(); - // In this example, get actual "GenericDAO' type. - final Class generic = field.getType(); - final Class classValue = field.getDeclaredAnnotation(DataAccess.class).entity(); - - if (genericTypeIsValid(classValue, fieldGenericType)) { - final String beanName = classValue.getSimpleName() + generic.getSimpleName(); - final Object beanInstance = getBeanInstance(beanName, generic, classValue); - field.set(bean, beanInstance); - } else { - throw new IllegalArgumentException(ERROR_ENTITY_VALUE_NOT_SAME); - } - } - - /** - * For example, if user write: - *
-     * @DataAccess(entity=Person.class) 
-     * private GenericDAO<Account> personGenericDAO;
-     * 
- * then this is should be failed. - */ - public boolean genericTypeIsValid(final Class clazz, final Type field) { - if (field instanceof ParameterizedType) { - final ParameterizedType parameterizedType = (ParameterizedType) field; - final Type type = parameterizedType.getActualTypeArguments()[0]; - - return type.equals(clazz); - } else { - logger.warn(WARN_NON_GENERIC_VALUE); - return true; - } - } - - public final Object getBeanInstance(final String beanName, final Class genericClass, final Class paramClass) { - Object daoInstance = null; - if (!configurableListableBeanFactory.containsBean(beanName)) { - logger.info("Creating new DataAccess bean named '{}'.", beanName); - - Object toRegister = null; - try { - final Constructor ctr = genericClass.getConstructor(Class.class); - toRegister = ctr.newInstance(paramClass); - } catch (final Exception e) { - logger.error(ERROR_CREATE_INSTANCE, genericClass.getTypeName(), e); - throw new RuntimeException(e); - } - - daoInstance = configurableListableBeanFactory.initializeBean(toRegister, beanName); - configurableListableBeanFactory.autowireBeanProperties(daoInstance, AUTOWIRE_MODE, true); - configurableListableBeanFactory.registerSingleton(beanName, daoInstance); - logger.info("Bean named '{}' created successfully.", beanName); - } else { - daoInstance = configurableListableBeanFactory.getBean(beanName); - logger.info("Bean named '{}' already exist used as current bean reference.", beanName); - } - return daoInstance; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java b/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java deleted file mode 100644 index 0edd33b049..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.customannotation; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -public class GenericDAO { - - private Class entityClass; - private String message; - - public GenericDAO(Class entityClass) { - this.entityClass = entityClass; - } - - public List findAll() { - message = "Would create findAll query from " + entityClass.getSimpleName(); - return Collections.emptyList(); - } - - public Optional persist(E toPersist) { - message = "Would create persist query from " + toPersist.getClass().getSimpleName(); - return Optional.empty(); - } - - /** Only used for unit-testing. */ - public final String getMessage() { - return message; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java deleted file mode 100644 index e892ae9d9b..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customscope; - -public class TenantBean { - - private final String name; - - public TenantBean(String name) { - this.name = name; - } - - public void sayHello() { - System.out.println(String.format("Hello from %s of type %s", this.name, this.getClass().getName())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java deleted file mode 100644 index 84ed0b46d7..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; - -public class TenantBeanFactoryPostProcessor implements BeanFactoryPostProcessor { - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { - factory.registerScope("tenant", new TenantScope()); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java deleted file mode 100644 index c219000fe6..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; - -@Configuration -public class TenantBeansConfig { - - @Scope(scopeName = "tenant") - @Bean - public TenantBean foo() { - return new TenantBean("foo"); - } - - @Scope(scopeName = "tenant") - @Bean - public TenantBean bar() { - return new TenantBean("bar"); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java deleted file mode 100644 index f3077bc4c2..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.customscope; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.config.Scope; - -public class TenantScope implements Scope { - - private Map scopedObjects = Collections.synchronizedMap(new HashMap()); - private Map destructionCallbacks = Collections.synchronizedMap(new HashMap()); - - @Override - public Object get(String name, ObjectFactory objectFactory) { - if (!scopedObjects.containsKey(name)) { - scopedObjects.put(name, objectFactory.getObject()); - } - return scopedObjects.get(name); - } - - @Override - public Object remove(String name) { - destructionCallbacks.remove(name); - return scopedObjects.remove(name); - } - - @Override - public void registerDestructionCallback(String name, Runnable callback) { - destructionCallbacks.put(name, callback); - } - - @Override - public Object resolveContextualObject(String key) { - return null; - } - - @Override - public String getConversationId() { - return "tenant"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java deleted file mode 100644 index 1829e1e8c4..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class TenantScopeConfig { - - @Bean - public static BeanFactoryPostProcessor beanFactoryPostProcessor() { - return new TenantBeanFactoryPostProcessor(); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java deleted file mode 100644 index 0d951aac8b..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.beans.factory.annotation.Autowired; - -import javax.annotation.PostConstruct; - -public abstract class BallService { - - private RuleRepository ruleRepository; - - private LogRepository logRepository; - - public BallService(RuleRepository ruleRepository) { - this.ruleRepository = ruleRepository; - } - - @Autowired - public final void setLogRepository(LogRepository logRepository) { - this.logRepository = logRepository; - } - - @PostConstruct - public void afterInitialize() { - - System.out.println(ruleRepository.toString()); - System.out.println(logRepository.toString()); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java deleted file mode 100644 index 4d6345b069..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class BasketballService extends BallService { - - @Autowired - public BasketballService(RuleRepository ruleRepository) { - super(ruleRepository); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java deleted file mode 100644 index 5a308b2671..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = "com.baeldung.sampleabstract") -public class DemoApp { - - - public static void main(String[] args) { - - ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoApp.class); - } - -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java deleted file mode 100644 index 84979768b5..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.stereotype.Component; - -@Component -public class LogRepository { - - @Override - public String toString() { - return "logRepository"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java deleted file mode 100644 index a1c5b5067f..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.stereotype.Component; - -@Component -public class RuleRepository { - - @Override - public String toString() { - return "ruleRepository"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java deleted file mode 100644 index e08309d474..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -@Component -@Scope(value = "prototype") -public class AllStrategiesExampleBean implements InitializingBean { - - private static final Logger LOG = LoggerFactory.getLogger(AllStrategiesExampleBean.class); - - public AllStrategiesExampleBean() { - LOG.info("Constructor"); - } - - @Override - public void afterPropertiesSet() throws Exception { - LOG.info("InitializingBean"); - } - - @PostConstruct - public void postConstruct() { - LOG.info("PostConstruct"); - } - - public void init() { - LOG.info("init-method"); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java deleted file mode 100644 index a76fc6a2b2..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -@Component -public class EventListenerExampleBean { - private static final Logger LOG = LoggerFactory.getLogger(EventListenerExampleBean.class); - - public static int counter; - - @EventListener - public void onApplicationEvent(ContextRefreshedEvent event) { - LOG.info("Increment counter"); - counter++; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java deleted file mode 100644 index a3b12028d1..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class InitMethodExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(InitMethodExampleBean.class); - - @Autowired - private Environment environment; - - public void init() { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java deleted file mode 100644 index c625a172fd..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class InitializingBeanExampleBean implements InitializingBean { - - private static final Logger LOG = LoggerFactory.getLogger(InitializingBeanExampleBean.class); - - @Autowired - private Environment environment; - - @Override - public void afterPropertiesSet() throws Exception { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java deleted file mode 100644 index d31aee8acd..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.startup; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope("prototype") -public class InvalidInitExampleBean { - - @Autowired - private Environment environment; - - public InvalidInitExampleBean() { - environment.getActiveProfiles(); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java deleted file mode 100644 index ade7573bbe..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class LogicInConstructorExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(LogicInConstructorExampleBean.class); - - @Autowired - public LogicInConstructorExampleBean(Environment environment) { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java deleted file mode 100644 index 1001043d86..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class PostConstructExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(PostConstructExampleBean.class); - - @Autowired - private Environment environment; - - @PostConstruct - public void init() { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java b/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java deleted file mode 100644 index ad6492dadc..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.startup; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("com.baeldung.startup") -public class SpringStartupConfig { -} \ No newline at end of file diff --git a/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java b/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java deleted file mode 100644 index 2cc5e6abcb..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.stereotype.Component; - -@Component -public class StartupApplicationListenerExample implements ApplicationListener { - - private static final Logger LOG = LoggerFactory.getLogger(StartupApplicationListenerExample.class); - - public static int counter; - - @Override - public void onApplicationEvent(ContextRefreshedEvent event) { - LOG.info("Increment counter"); - counter++; - } -} diff --git a/spring-core-2/src/main/resources/startupConfig.xml b/spring-core-2/src/main/resources/startupConfig.xml deleted file mode 100644 index d42e0f6c2b..0000000000 --- a/spring-core-2/src/main/resources/startupConfig.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java b/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java deleted file mode 100644 index cfdd8815e4..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.customannotation; - -import java.io.Serializable; - -public class Account implements Serializable { - - private static final long serialVersionUID = 7857541629844398625L; - - private Long id; - private String email; - private Person person; - - public Account() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java deleted file mode 100644 index a0707f263b..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.stereotype.Repository; - -@Repository -public class BeanWithGenericDAO { - - @DataAccess(entity = Person.class) - private GenericDAO personGenericDAO; - - public BeanWithGenericDAO() { - } - - public GenericDAO getPersonGenericDAO() { - return personGenericDAO; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java deleted file mode 100644 index 1baea4505b..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.baeldung.customannotation; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.CoreMatchers.sameInstance; -import static org.junit.Assert.assertThat; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessAnnotationIntegrationTest { - - @DataAccess(entity = Person.class) - private GenericDAO personGenericDAO; - @DataAccess(entity = Account.class) - private GenericDAO accountGenericDAO; - @DataAccess(entity = Person.class) - private GenericDAO anotherPersonGenericDAO; - - @Test - public void whenGenericDAOInitialized_thenNotNull() { - assertThat(personGenericDAO, is(notNullValue())); - assertThat(accountGenericDAO, is(notNullValue())); - } - - @Test - public void whenGenericDAOInjected_thenItIsSingleton() { - assertThat(personGenericDAO, not(sameInstance(accountGenericDAO))); - assertThat(personGenericDAO, not(equalTo(accountGenericDAO))); - - assertThat(personGenericDAO, sameInstance(anotherPersonGenericDAO)); - } - - @Test - public void whenFindAll_thenMessagesIsCorrect() { - personGenericDAO.findAll(); - assertThat(personGenericDAO.getMessage(), is("Would create findAll query from Person")); - - accountGenericDAO.findAll(); - assertThat(accountGenericDAO.getMessage(), is("Would create findAll query from Account")); - } - - @Test - public void whenPersist_thenMakeSureThatMessagesIsCorrect() { - personGenericDAO.persist(new Person()); - assertThat(personGenericDAO.getMessage(), is("Would create persist query from Person")); - - accountGenericDAO.persist(new Account()); - assertThat(accountGenericDAO.getMessage(), is("Would create persist query from Account")); - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java deleted file mode 100644 index bc7a5f7246..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.customannotation; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.lang.reflect.Type; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessFieldCallbackIntegrationTest { - - @Autowired - private ConfigurableListableBeanFactory configurableListableBeanFactory; - - @Autowired - private BeanWithGenericDAO beanWithGenericDAO; - - @Rule - public ExpectedException ex = ExpectedException.none(); - - @Test - public void whenObjectCreated_thenObjectCreationIsSuccessful() { - final DataAccessFieldCallback dataAccessFieldCallback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - assertThat(dataAccessFieldCallback, is(notNullValue())); - } - - @Test - public void whenMethodGenericTypeIsValidCalled_thenReturnCorrectValue() throws NoSuchFieldException, SecurityException { - final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - final Type fieldType = BeanWithGenericDAO.class.getDeclaredField("personGenericDAO").getGenericType(); - final boolean result = callback.genericTypeIsValid(Person.class, fieldType); - assertThat(result, is(true)); - } - - @Test - public void whenMethodGetBeanInstanceCalled_thenReturnCorrectInstance() { - final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - final Object result = callback.getBeanInstance("personGenericDAO", GenericDAO.class, Person.class); - assertThat((result instanceof GenericDAO), is(true)); - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java b/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java deleted file mode 100644 index 4fa70e51af..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.customannotation; - -import java.io.Serializable; - -public class Person implements Serializable { - - private static final long serialVersionUID = 9005331414216374586L; - - private Long id; - private String name; - - public Person() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java deleted file mode 100644 index 1cd7357a09..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.customscope; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - -import org.junit.Test; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -public class TenantScopeIntegrationTest { - - @Test - public final void whenRegisterScopeAndBeans_thenContextContainsFooAndBar() { - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - try { - ctx.register(TenantScopeConfig.class); - ctx.register(TenantBeansConfig.class); - ctx.refresh(); - - TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); - foo.sayHello(); - TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); - bar.sayHello(); - Map foos = ctx.getBeansOfType(TenantBean.class); - - assertThat(foo, not(equalTo(bar))); - assertThat(foos.size(), equalTo(2)); - assertTrue(foos.containsValue(foo)); - assertTrue(foos.containsValue(bar)); - - BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); - BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); - - assertThat(fooDefinition.getScope(), equalTo("tenant")); - assertThat(barDefinition.getScope(), equalTo("tenant")); - } finally { - ctx.close(); - } - } - - @Test - public final void whenComponentScan_thenContextContainsFooAndBar() { - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - try { - ctx.scan("com.baeldung.customscope"); - ctx.refresh(); - - TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); - foo.sayHello(); - TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); - bar.sayHello(); - Map foos = ctx.getBeansOfType(TenantBean.class); - - assertThat(foo, not(equalTo(bar))); - assertThat(foos.size(), equalTo(2)); - assertTrue(foos.containsValue(foo)); - assertTrue(foos.containsValue(bar)); - - BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); - BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); - - assertThat(fooDefinition.getScope(), equalTo("tenant")); - assertThat(barDefinition.getScope(), equalTo("tenant")); - } finally { - ctx.close(); - } - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java deleted file mode 100644 index b58c093c31..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.startup; - -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { SpringStartupConfig.class }, loader = AnnotationConfigContextLoader.class) -public class SpringStartupIntegrationTest { - - @Autowired - private ApplicationContext ctx; - - @Test(expected = BeanCreationException.class) - public void whenInstantiating_shouldThrowBCE() throws Exception { - ctx.getBean(InvalidInitExampleBean.class); - } - - @Test - public void whenPostConstruct_shouldLogEnv() throws Exception { - ctx.getBean(PostConstructExampleBean.class); - } - - @Test - public void whenConstructorInjection_shouldLogEnv() throws Exception { - ctx.getBean(LogicInConstructorExampleBean.class); - } - - @Test - public void whenInitializingBean_shouldLogEnv() throws Exception { - ctx.getBean(InitializingBeanExampleBean.class); - } - - @Test - public void whenApplicationListener_shouldRunOnce() throws Exception { - Assertions.assertThat(StartupApplicationListenerExample.counter).isEqualTo(1); - } -} \ No newline at end of file diff --git a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java deleted file mode 100644 index 3dfd4835df..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.startup; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:startupConfig.xml") -public class SpringStartupXMLConfigIntegrationTest { - - @Autowired - private ApplicationContext ctx; - - @Test - public void whenPostConstruct_shouldLogEnv() throws Exception { - ctx.getBean(InitMethodExampleBean.class); - } - - @Test - public void whenAllStrategies_shouldLogOrder() throws Exception { - ctx.getBean(AllStrategiesExampleBean.class); - } -} From c3e41be3c43254f54c9b3c4e64506c7aa9376af4 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:27:20 +0530 Subject: [PATCH 3/7] JAVA-628: Moved 2 articles from spring-core-3 --- spring-core-3/README.md | 4 +- .../com/baeldung/collection/BaeldungBean.java | 18 ------ .../baeldung/collection/CollectionConfig.java | 50 --------------- .../collection/CollectionInjectionDemo.java | 21 ------- .../baeldung/collection/CollectionsBean.java | 62 ------------------- .../staticvalue/injection/Application.java | 16 ----- .../injection/PropertyController.java | 30 --------- 7 files changed, 2 insertions(+), 199 deletions(-) delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java diff --git a/spring-core-3/README.md b/spring-core-3/README.md index 6c210b23ef..b6257cb9a4 100644 --- a/spring-core-3/README.md +++ b/spring-core-3/README.md @@ -7,8 +7,8 @@ This module contains articles about core Spring functionality - [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) - [Guide to the Spring BeanFactory](https://www.baeldung.com/spring-beanfactory) - [How to use the Spring FactoryBean?](https://www.baeldung.com/spring-factorybean) -- [Spring – Injecting Collections](https://www.baeldung.com/spring-injecting-collections) - [Design Patterns in the Spring Framework](https://www.baeldung.com/spring-framework-design-patterns) -- [Injecting a Value in a Static Field in Spring](https://www.baeldung.com/spring-inject-static-field) - [Difference Between BeanFactory and ApplicationContext](https://www.baeldung.com/spring-beanfactory-vs-applicationcontext) +- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) +- [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope) - More articles: [[<-- prev]](/spring-core-2) diff --git a/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java b/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java deleted file mode 100644 index 6d7351df02..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.collection; - -/** - * Created by Gebruiker on 5/22/2018. - */ -public class BaeldungBean { - - private String name; - - public BaeldungBean(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java deleted file mode 100644 index fbae2963e5..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.collection; - -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; - -import java.util.*; - -@Configuration -public class CollectionConfig { - - @Bean - public CollectionsBean getCollectionsBean() { - return new CollectionsBean(new HashSet<>(Arrays.asList("John", "Adam", "Harry"))); - } - - @Bean - public List nameList(){ - return Arrays.asList("John", "Adam", "Harry", null); - } - - @Bean - public Map nameMap(){ - Map nameMap = new HashMap<>(); - nameMap.put(1, "John"); - nameMap.put(2, "Adam"); - nameMap.put(3, "Harry"); - return nameMap; - } - - @Bean - @Qualifier("CollectionsBean") - @Order(2) - public BaeldungBean getElement() { - return new BaeldungBean("John"); - } - - @Bean - @Order(3) - public BaeldungBean getAnotherElement() { - return new BaeldungBean("Adam"); - } - - @Bean - @Order(1) - public BaeldungBean getOneMoreElement() { - return new BaeldungBean("Harry"); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java deleted file mode 100644 index 2ee265f134..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.collection; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Created by Gebruiker on 5/18/2018. - */ -public class CollectionInjectionDemo { - - public static void main(String[] args) { - - ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); - CollectionsBean collectionsBean = context.getBean(CollectionsBean.class); - collectionsBean.printNameList(); - collectionsBean.printNameSet(); - collectionsBean.printNameMap(); - collectionsBean.printBeanList(); - collectionsBean.printNameListWithDefaults(); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java deleted file mode 100644 index fc90f2c6ff..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.collection; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; - -/** - * Created by Gebruiker on 5/18/2018. - */ -public class CollectionsBean { - - @Autowired - private List nameList; - - private Set nameSet; - - private Map nameMap; - - @Autowired(required = false) - @Qualifier("CollectionsBean") - private List beanList = new ArrayList<>(); - - @Value("${names.list:}#{T(java.util.Collections).emptyList()}") - private List nameListWithDefaultValue; - - public CollectionsBean() { - } - - public CollectionsBean(Set strings) { - this.nameSet = strings; - } - - @Autowired - public void setNameMap(Map nameMap) { - this.nameMap = nameMap; - } - - public void printNameList() { - System.out.println(nameList); - } - - public void printNameSet() { - System.out.println(nameSet); - } - - public void printNameMap() { - System.out.println(nameMap); - } - - public void printBeanList() { - System.out.println(beanList); - } - - public void printNameListWithDefaults() { - System.out.println(nameListWithDefaultValue); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java b/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java deleted file mode 100644 index 45c47c955f..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.staticvalue.injection; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.PropertySource; - -@SpringBootApplication -@PropertySource("/application.properties") - -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java b/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java deleted file mode 100644 index f5910ea4f8..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.staticvalue.injection; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Arrays; -import java.util.List; - -@RestController -public class PropertyController { - - @Value("${name}") - private String name; - - @Value("${name}") - private static String NAME_NULL; - - private static String NAME_STATIC; - - @Value("${name}") - public void setNameStatic(String name){ - PropertyController.NAME_STATIC = name; - } - - @GetMapping("/properties") - public List getProperties(){ - return Arrays.asList(this.name, NAME_STATIC, NAME_NULL) ; - } -} From 502bf3c45c3eed30562b7ef09e34b4f651ba4b80 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:27:50 +0530 Subject: [PATCH 4/7] JAVA-628: Moved 2 articles to spring-core-3 --- .../CustomAnnotationConfiguration.java | 9 ++ .../baeldung/customannotation/DataAccess.java | 14 +++ .../DataAccessAnnotationProcessor.java | 37 +++++++ .../DataAccessFieldCallback.java | 96 +++++++++++++++++++ .../baeldung/customannotation/GenericDAO.java | 30 ++++++ .../com/baeldung/customscope/TenantBean.java | 14 +++ .../TenantBeanFactoryPostProcessor.java | 13 +++ .../customscope/TenantBeansConfig.java | 21 ++++ .../com/baeldung/customscope/TenantScope.java | 43 +++++++++ .../customscope/TenantScopeConfig.java | 14 +++ .../baeldung/customannotation/Account.java | 40 ++++++++ .../customannotation/BeanWithGenericDAO.java | 18 ++++ .../DataAccessAnnotationIntegrationTest.java | 57 +++++++++++ ...ataAccessFieldCallbackIntegrationTest.java | 51 ++++++++++ .../com/baeldung/customannotation/Person.java | 31 ++++++ .../TenantScopeIntegrationTest.java | 72 ++++++++++++++ 16 files changed, 560 insertions(+) create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/Account.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/Person.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java new file mode 100644 index 0000000000..2e42a3f744 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java @@ -0,0 +1,9 @@ +package com.baeldung.customannotation; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.customannotation") +public class CustomAnnotationConfiguration { +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java new file mode 100644 index 0000000000..4160bad16d --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java @@ -0,0 +1,14 @@ +package com.baeldung.customannotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) +@Documented +public @interface DataAccess { + Class entity(); +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java new file mode 100644 index 0000000000..27008176a8 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java @@ -0,0 +1,37 @@ +package com.baeldung.customannotation; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; + +@Component +public class DataAccessAnnotationProcessor implements BeanPostProcessor { + + private ConfigurableListableBeanFactory configurableListableBeanFactory; + + @Autowired + public DataAccessAnnotationProcessor(ConfigurableListableBeanFactory bf) { + configurableListableBeanFactory = bf; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + scanDataAccessAnnotation(bean, beanName); + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + + protected void scanDataAccessAnnotation(Object bean, String beanName) { + Class managedBeanClass = bean.getClass(); + FieldCallback fcb = new DataAccessFieldCallback(configurableListableBeanFactory, bean); + ReflectionUtils.doWithFields(managedBeanClass, fcb); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java new file mode 100644 index 0000000000..07b5298ea9 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java @@ -0,0 +1,96 @@ +package com.baeldung.customannotation; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; + +public final class DataAccessFieldCallback implements FieldCallback { + + private static Logger logger = LoggerFactory.getLogger(DataAccessFieldCallback.class); + private static int AUTOWIRE_MODE = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; + + private static String ERROR_ENTITY_VALUE_NOT_SAME = "@DataAccess(entity) " + "value should have same type with injected generic type."; + private static String WARN_NON_GENERIC_VALUE = "@DataAccess annotation assigned " + "to raw (non-generic) declaration. This will make your code less type-safe."; + private static String ERROR_CREATE_INSTANCE = "Cannot create instance of " + "type '{}' or instance creation is failed because: {}"; + + private ConfigurableListableBeanFactory configurableListableBeanFactory; + private Object bean; + + public DataAccessFieldCallback(final ConfigurableListableBeanFactory bf, final Object bean) { + configurableListableBeanFactory = bf; + this.bean = bean; + } + + @Override + public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { + if (!field.isAnnotationPresent(DataAccess.class)) { + return; + } + ReflectionUtils.makeAccessible(field); + final Type fieldGenericType = field.getGenericType(); + // In this example, get actual "GenericDAO' type. + final Class generic = field.getType(); + final Class classValue = field.getDeclaredAnnotation(DataAccess.class).entity(); + + if (genericTypeIsValid(classValue, fieldGenericType)) { + final String beanName = classValue.getSimpleName() + generic.getSimpleName(); + final Object beanInstance = getBeanInstance(beanName, generic, classValue); + field.set(bean, beanInstance); + } else { + throw new IllegalArgumentException(ERROR_ENTITY_VALUE_NOT_SAME); + } + } + + /** + * For example, if user write: + *
+     * @DataAccess(entity=Person.class) 
+     * private GenericDAO<Account> personGenericDAO;
+     * 
+ * then this is should be failed. + */ + public boolean genericTypeIsValid(final Class clazz, final Type field) { + if (field instanceof ParameterizedType) { + final ParameterizedType parameterizedType = (ParameterizedType) field; + final Type type = parameterizedType.getActualTypeArguments()[0]; + + return type.equals(clazz); + } else { + logger.warn(WARN_NON_GENERIC_VALUE); + return true; + } + } + + public final Object getBeanInstance(final String beanName, final Class genericClass, final Class paramClass) { + Object daoInstance = null; + if (!configurableListableBeanFactory.containsBean(beanName)) { + logger.info("Creating new DataAccess bean named '{}'.", beanName); + + Object toRegister = null; + try { + final Constructor ctr = genericClass.getConstructor(Class.class); + toRegister = ctr.newInstance(paramClass); + } catch (final Exception e) { + logger.error(ERROR_CREATE_INSTANCE, genericClass.getTypeName(), e); + throw new RuntimeException(e); + } + + daoInstance = configurableListableBeanFactory.initializeBean(toRegister, beanName); + configurableListableBeanFactory.autowireBeanProperties(daoInstance, AUTOWIRE_MODE, true); + configurableListableBeanFactory.registerSingleton(beanName, daoInstance); + logger.info("Bean named '{}' created successfully.", beanName); + } else { + daoInstance = configurableListableBeanFactory.getBean(beanName); + logger.info("Bean named '{}' already exist used as current bean reference.", beanName); + } + return daoInstance; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java b/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java new file mode 100644 index 0000000000..0edd33b049 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java @@ -0,0 +1,30 @@ +package com.baeldung.customannotation; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +public class GenericDAO { + + private Class entityClass; + private String message; + + public GenericDAO(Class entityClass) { + this.entityClass = entityClass; + } + + public List findAll() { + message = "Would create findAll query from " + entityClass.getSimpleName(); + return Collections.emptyList(); + } + + public Optional persist(E toPersist) { + message = "Would create persist query from " + toPersist.getClass().getSimpleName(); + return Optional.empty(); + } + + /** Only used for unit-testing. */ + public final String getMessage() { + return message; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java new file mode 100644 index 0000000000..e892ae9d9b --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java @@ -0,0 +1,14 @@ +package com.baeldung.customscope; + +public class TenantBean { + + private final String name; + + public TenantBean(String name) { + this.name = name; + } + + public void sayHello() { + System.out.println(String.format("Hello from %s of type %s", this.name, this.getClass().getName())); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java new file mode 100644 index 0000000000..84ed0b46d7 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java @@ -0,0 +1,13 @@ +package com.baeldung.customscope; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; + +public class TenantBeanFactoryPostProcessor implements BeanFactoryPostProcessor { + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { + factory.registerScope("tenant", new TenantScope()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java new file mode 100644 index 0000000000..c219000fe6 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java @@ -0,0 +1,21 @@ +package com.baeldung.customscope; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +@Configuration +public class TenantBeansConfig { + + @Scope(scopeName = "tenant") + @Bean + public TenantBean foo() { + return new TenantBean("foo"); + } + + @Scope(scopeName = "tenant") + @Bean + public TenantBean bar() { + return new TenantBean("bar"); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java new file mode 100644 index 0000000000..f3077bc4c2 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java @@ -0,0 +1,43 @@ +package com.baeldung.customscope; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.config.Scope; + +public class TenantScope implements Scope { + + private Map scopedObjects = Collections.synchronizedMap(new HashMap()); + private Map destructionCallbacks = Collections.synchronizedMap(new HashMap()); + + @Override + public Object get(String name, ObjectFactory objectFactory) { + if (!scopedObjects.containsKey(name)) { + scopedObjects.put(name, objectFactory.getObject()); + } + return scopedObjects.get(name); + } + + @Override + public Object remove(String name) { + destructionCallbacks.remove(name); + return scopedObjects.remove(name); + } + + @Override + public void registerDestructionCallback(String name, Runnable callback) { + destructionCallbacks.put(name, callback); + } + + @Override + public Object resolveContextualObject(String key) { + return null; + } + + @Override + public String getConversationId() { + return "tenant"; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java new file mode 100644 index 0000000000..1829e1e8c4 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java @@ -0,0 +1,14 @@ +package com.baeldung.customscope; + +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class TenantScopeConfig { + + @Bean + public static BeanFactoryPostProcessor beanFactoryPostProcessor() { + return new TenantBeanFactoryPostProcessor(); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java b/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java new file mode 100644 index 0000000000..cfdd8815e4 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java @@ -0,0 +1,40 @@ +package com.baeldung.customannotation; + +import java.io.Serializable; + +public class Account implements Serializable { + + private static final long serialVersionUID = 7857541629844398625L; + + private Long id; + private String email; + private Person person; + + public Account() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java new file mode 100644 index 0000000000..a0707f263b --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java @@ -0,0 +1,18 @@ +package com.baeldung.customannotation; + +import org.springframework.stereotype.Repository; + +@Repository +public class BeanWithGenericDAO { + + @DataAccess(entity = Person.class) + private GenericDAO personGenericDAO; + + public BeanWithGenericDAO() { + } + + public GenericDAO getPersonGenericDAO() { + return personGenericDAO; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java new file mode 100644 index 0000000000..1baea4505b --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java @@ -0,0 +1,57 @@ +package com.baeldung.customannotation; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.sameInstance; +import static org.junit.Assert.assertThat; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) +public class DataAccessAnnotationIntegrationTest { + + @DataAccess(entity = Person.class) + private GenericDAO personGenericDAO; + @DataAccess(entity = Account.class) + private GenericDAO accountGenericDAO; + @DataAccess(entity = Person.class) + private GenericDAO anotherPersonGenericDAO; + + @Test + public void whenGenericDAOInitialized_thenNotNull() { + assertThat(personGenericDAO, is(notNullValue())); + assertThat(accountGenericDAO, is(notNullValue())); + } + + @Test + public void whenGenericDAOInjected_thenItIsSingleton() { + assertThat(personGenericDAO, not(sameInstance(accountGenericDAO))); + assertThat(personGenericDAO, not(equalTo(accountGenericDAO))); + + assertThat(personGenericDAO, sameInstance(anotherPersonGenericDAO)); + } + + @Test + public void whenFindAll_thenMessagesIsCorrect() { + personGenericDAO.findAll(); + assertThat(personGenericDAO.getMessage(), is("Would create findAll query from Person")); + + accountGenericDAO.findAll(); + assertThat(accountGenericDAO.getMessage(), is("Would create findAll query from Account")); + } + + @Test + public void whenPersist_thenMakeSureThatMessagesIsCorrect() { + personGenericDAO.persist(new Person()); + assertThat(personGenericDAO.getMessage(), is("Would create persist query from Person")); + + accountGenericDAO.persist(new Account()); + assertThat(accountGenericDAO.getMessage(), is("Would create persist query from Account")); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java new file mode 100644 index 0000000000..bc7a5f7246 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java @@ -0,0 +1,51 @@ +package com.baeldung.customannotation; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import java.lang.reflect.Type; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) +public class DataAccessFieldCallbackIntegrationTest { + + @Autowired + private ConfigurableListableBeanFactory configurableListableBeanFactory; + + @Autowired + private BeanWithGenericDAO beanWithGenericDAO; + + @Rule + public ExpectedException ex = ExpectedException.none(); + + @Test + public void whenObjectCreated_thenObjectCreationIsSuccessful() { + final DataAccessFieldCallback dataAccessFieldCallback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + assertThat(dataAccessFieldCallback, is(notNullValue())); + } + + @Test + public void whenMethodGenericTypeIsValidCalled_thenReturnCorrectValue() throws NoSuchFieldException, SecurityException { + final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + final Type fieldType = BeanWithGenericDAO.class.getDeclaredField("personGenericDAO").getGenericType(); + final boolean result = callback.genericTypeIsValid(Person.class, fieldType); + assertThat(result, is(true)); + } + + @Test + public void whenMethodGetBeanInstanceCalled_thenReturnCorrectInstance() { + final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + final Object result = callback.getBeanInstance("personGenericDAO", GenericDAO.class, Person.class); + assertThat((result instanceof GenericDAO), is(true)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java b/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java new file mode 100644 index 0000000000..4fa70e51af --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java @@ -0,0 +1,31 @@ +package com.baeldung.customannotation; + +import java.io.Serializable; + +public class Person implements Serializable { + + private static final long serialVersionUID = 9005331414216374586L; + + private Long id; + private String name; + + public Person() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java new file mode 100644 index 0000000000..1cd7357a09 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java @@ -0,0 +1,72 @@ +package com.baeldung.customscope; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + +import org.junit.Test; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class TenantScopeIntegrationTest { + + @Test + public final void whenRegisterScopeAndBeans_thenContextContainsFooAndBar() { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + try { + ctx.register(TenantScopeConfig.class); + ctx.register(TenantBeansConfig.class); + ctx.refresh(); + + TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); + foo.sayHello(); + TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); + bar.sayHello(); + Map foos = ctx.getBeansOfType(TenantBean.class); + + assertThat(foo, not(equalTo(bar))); + assertThat(foos.size(), equalTo(2)); + assertTrue(foos.containsValue(foo)); + assertTrue(foos.containsValue(bar)); + + BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); + BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); + + assertThat(fooDefinition.getScope(), equalTo("tenant")); + assertThat(barDefinition.getScope(), equalTo("tenant")); + } finally { + ctx.close(); + } + } + + @Test + public final void whenComponentScan_thenContextContainsFooAndBar() { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + try { + ctx.scan("com.baeldung.customscope"); + ctx.refresh(); + + TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); + foo.sayHello(); + TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); + bar.sayHello(); + Map foos = ctx.getBeansOfType(TenantBean.class); + + assertThat(foo, not(equalTo(bar))); + assertThat(foos.size(), equalTo(2)); + assertTrue(foos.containsValue(foo)); + assertTrue(foos.containsValue(bar)); + + BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); + BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); + + assertThat(fooDefinition.getScope(), equalTo("tenant")); + assertThat(barDefinition.getScope(), equalTo("tenant")); + } finally { + ctx.close(); + } + } +} From 9ffb4d4d641d6e153b6f10729ddf084b7f575232 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:29:08 +0530 Subject: [PATCH 5/7] JAVA-628: Moved 3 articles to spring-core-4 --- spring-core-4/README.md | 3 ++ spring-core-4/pom.xml | 5 +++ .../com/baeldung/lombok/ApologizeService.java | 22 ++++++++++ .../com/baeldung/lombok/FarewellService.java | 18 ++++++++ .../com/baeldung/lombok/GreetingService.java | 15 +++++++ .../com/baeldung/lombok/ThankingService.java | 15 +++++++ .../java/com/baeldung/lombok/Translator.java | 5 +++ .../baeldung/sampleabstract/BallService.java | 28 ++++++++++++ .../sampleabstract/BasketballService.java | 13 ++++++ .../com/baeldung/sampleabstract/DemoApp.java | 18 ++++++++ .../sampleabstract/LogRepository.java | 12 +++++ .../sampleabstract/RuleRepository.java | 12 +++++ .../startup/AllStrategiesExampleBean.java | 35 +++++++++++++++ .../startup/EventListenerExampleBean.java | 21 +++++++++ .../startup/InitMethodExampleBean.java | 24 ++++++++++ .../startup/InitializingBeanExampleBean.java | 26 +++++++++++ .../startup/InvalidInitExampleBean.java | 18 ++++++++ .../LogicInConstructorExampleBean.java | 22 ++++++++++ .../startup/PostConstructExampleBean.java | 27 ++++++++++++ .../baeldung/startup/SpringStartupConfig.java | 9 ++++ .../StartupApplicationListenerExample.java | 22 ++++++++++ .../src/main/resources/startupConfig.xml | 16 +++++++ ...ogizeServiceAutowiringIntegrationTest.java | 33 ++++++++++++++ .../ApologizeServiceIntegrationTest.java | 21 +++++++++ .../FarewellAutowiringIntegrationTest.java | 31 +++++++++++++ .../FarewellServiceIntegrationTest.java | 20 +++++++++ .../GreetingServiceIntegrationTest.java | 37 ++++++++++++++++ .../java/com/baeldung/lombok/TestConfig.java | 17 +++++++ ...nkingServiceAutowiringIntegrationTest.java | 31 +++++++++++++ .../ThankingServiceIntegrationTest.java | 20 +++++++++ .../startup/SpringStartupIntegrationTest.java | 44 +++++++++++++++++++ ...SpringStartupXMLConfigIntegrationTest.java | 26 +++++++++++ 32 files changed, 666 insertions(+) create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/Translator.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java create mode 100644 spring-core-4/src/main/resources/startupConfig.xml create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java diff --git a/spring-core-4/README.md b/spring-core-4/README.md index 9da90ac77a..706c330f39 100644 --- a/spring-core-4/README.md +++ b/spring-core-4/README.md @@ -8,4 +8,7 @@ This module contains articles about core Spring functionality - [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire) - [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation) - [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor) +- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [Running Setup Data on Startup in Spring](https://www.baeldung.com/running-setup-logic-on-startup-in-spring) +- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) - More articles: [[<-- prev]](/spring-core-3) diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml index 299debbc3c..e5aee1f81d 100644 --- a/spring-core-4/pom.xml +++ b/spring-core-4/pom.xml @@ -29,6 +29,11 @@ spring-expression ${spring.version} + + org.projectlombok + lombok + ${lombok.version} + com.google.guava guava diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java b/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java new file mode 100644 index 0000000000..76c3df8217 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java @@ -0,0 +1,22 @@ +package com.baeldung.lombok; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class ApologizeService { + + private final Translator translator; + private final String message; + + @Autowired + public ApologizeService(Translator translator) { + this(translator, "sorry"); + } + + public String apologize() { + return translator.translate(message); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java b/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java new file mode 100644 index 0000000000..4e8c4993cb --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java @@ -0,0 +1,18 @@ +package com.baeldung.lombok; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FarewellService { + + private final Translator translator; + + public FarewellService(Translator translator) { + this.translator = translator; + } + + public String farewell() { + return translator.translate("bye"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java b/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java new file mode 100644 index 0000000000..0e03e177e1 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class GreetingService { + + @Autowired + private Translator translator; + + public String greet() { + return translator.translate("hello"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java b/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java new file mode 100644 index 0000000000..2e0c398d2d --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class ThankingService { + + private final Translator translator; + + public String thank() { + return translator.translate("thank you"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java b/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java new file mode 100644 index 0000000000..2dea20b726 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java @@ -0,0 +1,5 @@ +package com.baeldung.lombok; + +public interface Translator { + String translate(String input); +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java new file mode 100644 index 0000000000..0d951aac8b --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java @@ -0,0 +1,28 @@ +package com.baeldung.sampleabstract; + +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.PostConstruct; + +public abstract class BallService { + + private RuleRepository ruleRepository; + + private LogRepository logRepository; + + public BallService(RuleRepository ruleRepository) { + this.ruleRepository = ruleRepository; + } + + @Autowired + public final void setLogRepository(LogRepository logRepository) { + this.logRepository = logRepository; + } + + @PostConstruct + public void afterInitialize() { + + System.out.println(ruleRepository.toString()); + System.out.println(logRepository.toString()); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java new file mode 100644 index 0000000000..4d6345b069 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java @@ -0,0 +1,13 @@ +package com.baeldung.sampleabstract; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class BasketballService extends BallService { + + @Autowired + public BasketballService(RuleRepository ruleRepository) { + super(ruleRepository); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java new file mode 100644 index 0000000000..5a308b2671 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java @@ -0,0 +1,18 @@ +package com.baeldung.sampleabstract; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = "com.baeldung.sampleabstract") +public class DemoApp { + + + public static void main(String[] args) { + + ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoApp.class); + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java new file mode 100644 index 0000000000..84979768b5 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.sampleabstract; + +import org.springframework.stereotype.Component; + +@Component +public class LogRepository { + + @Override + public String toString() { + return "logRepository"; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java new file mode 100644 index 0000000000..a1c5b5067f --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.sampleabstract; + +import org.springframework.stereotype.Component; + +@Component +public class RuleRepository { + + @Override + public String toString() { + return "ruleRepository"; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java new file mode 100644 index 0000000000..e08309d474 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java @@ -0,0 +1,35 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Scope(value = "prototype") +public class AllStrategiesExampleBean implements InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(AllStrategiesExampleBean.class); + + public AllStrategiesExampleBean() { + LOG.info("Constructor"); + } + + @Override + public void afterPropertiesSet() throws Exception { + LOG.info("InitializingBean"); + } + + @PostConstruct + public void postConstruct() { + LOG.info("PostConstruct"); + } + + public void init() { + LOG.info("init-method"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java new file mode 100644 index 0000000000..a76fc6a2b2 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java @@ -0,0 +1,21 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +public class EventListenerExampleBean { + private static final Logger LOG = LoggerFactory.getLogger(EventListenerExampleBean.class); + + public static int counter; + + @EventListener + public void onApplicationEvent(ContextRefreshedEvent event) { + LOG.info("Increment counter"); + counter++; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java new file mode 100644 index 0000000000..a3b12028d1 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java @@ -0,0 +1,24 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class InitMethodExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(InitMethodExampleBean.class); + + @Autowired + private Environment environment; + + public void init() { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java new file mode 100644 index 0000000000..c625a172fd --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java @@ -0,0 +1,26 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class InitializingBeanExampleBean implements InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(InitializingBeanExampleBean.class); + + @Autowired + private Environment environment; + + @Override + public void afterPropertiesSet() throws Exception { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java new file mode 100644 index 0000000000..d31aee8acd --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java @@ -0,0 +1,18 @@ +package com.baeldung.startup; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope("prototype") +public class InvalidInitExampleBean { + + @Autowired + private Environment environment; + + public InvalidInitExampleBean() { + environment.getActiveProfiles(); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java new file mode 100644 index 0000000000..ade7573bbe --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java @@ -0,0 +1,22 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class LogicInConstructorExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(LogicInConstructorExampleBean.class); + + @Autowired + public LogicInConstructorExampleBean(Environment environment) { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java new file mode 100644 index 0000000000..1001043d86 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java @@ -0,0 +1,27 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import javax.annotation.PostConstruct; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class PostConstructExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(PostConstructExampleBean.class); + + @Autowired + private Environment environment; + + @PostConstruct + public void init() { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java b/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java new file mode 100644 index 0000000000..ad6492dadc --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.startup; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.startup") +public class SpringStartupConfig { +} \ No newline at end of file diff --git a/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java b/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java new file mode 100644 index 0000000000..2cc5e6abcb --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java @@ -0,0 +1,22 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +@Component +public class StartupApplicationListenerExample implements ApplicationListener { + + private static final Logger LOG = LoggerFactory.getLogger(StartupApplicationListenerExample.class); + + public static int counter; + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + LOG.info("Increment counter"); + counter++; + } +} diff --git a/spring-core-4/src/main/resources/startupConfig.xml b/spring-core-4/src/main/resources/startupConfig.xml new file mode 100644 index 0000000000..d42e0f6c2b --- /dev/null +++ b/spring-core-4/src/main/resources/startupConfig.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java new file mode 100644 index 0000000000..a49dd84f11 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.lombok; + +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 static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class ApologizeServiceAutowiringIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Autowired + private ApologizeService apologizeService; + + @Autowired + private Translator translator; + + @Test + public void apologizeWithTranslatedMessage() { + when(translator.translate("sorry")).thenReturn(TRANSLATED); + assertEquals(TRANSLATED, apologizeService.apologize()); + } + +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java new file mode 100644 index 0000000000..77f0c94299 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java @@ -0,0 +1,21 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ApologizeServiceIntegrationTest { + + private final static String MESSAGE = "MESSAGE"; + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void apologizeWithCustomTranslatedMessage() { + Translator translator = mock(Translator.class); + ApologizeService apologizeService = new ApologizeService(translator, MESSAGE); + when(translator.translate(MESSAGE)).thenReturn(TRANSLATED); + assertEquals(TRANSLATED, apologizeService.apologize()); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java new file mode 100644 index 0000000000..ec0793bd2e --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.lombok; + +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 static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class FarewellAutowiringIntegrationTest { + + @Autowired + private FarewellService farewellService; + + @Autowired + private Translator translator; + + @Test + public void sayByeWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("bye")).thenReturn(translated); + assertEquals(translated, farewellService.farewell()); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java new file mode 100644 index 0000000000..38959a511f --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class FarewellServiceIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void sayByeWithTranslatedMessage() { + Translator translator = mock(Translator.class); + when(translator.translate("bye")).thenReturn(TRANSLATED); + FarewellService farewellService = new FarewellService(translator); + assertEquals(TRANSLATED, farewellService.farewell()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java new file mode 100644 index 0000000000..0516b5eb56 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java @@ -0,0 +1,37 @@ +package com.baeldung.lombok; + +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 static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class GreetingServiceIntegrationTest { + + @Autowired + private GreetingService greetingService; + + @Autowired + private Translator translator; + + @Test + public void greetWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("hello")).thenReturn(translated); + assertEquals(translated, greetingService.greet()); + } + + @Test(expected = NullPointerException.class) + public void throwWhenInstantiated() { + GreetingService greetingService = new GreetingService(); + greetingService.greet(); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java b/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java new file mode 100644 index 0000000000..3278a8188f --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java @@ -0,0 +1,17 @@ +package com.baeldung.lombok; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import static org.mockito.Mockito.mock; + +@Configuration +@ComponentScan("com.baeldung.lombok") +class TestConfig { + + @Bean + public Translator mockTranslator() { + return mock(Translator.class); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java new file mode 100644 index 0000000000..fb9abbad46 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.lombok; + +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 static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class ThankingServiceAutowiringIntegrationTest { + + @Autowired + private ThankingService thankingService; + + @Autowired + private Translator translator; + + @Test + public void thankWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("thank you")).thenReturn(translated); + assertEquals(translated, thankingService.thank()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java new file mode 100644 index 0000000000..680f926717 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ThankingServiceIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void thankWithTranslatedMessage() { + Translator translator = mock(Translator.class); + when(translator.translate("thank you")).thenReturn(TRANSLATED); + ThankingService thankingService = new ThankingService(translator); + assertEquals(TRANSLATED, thankingService.thank()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java new file mode 100644 index 0000000000..b58c093c31 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java @@ -0,0 +1,44 @@ +package com.baeldung.startup; + +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { SpringStartupConfig.class }, loader = AnnotationConfigContextLoader.class) +public class SpringStartupIntegrationTest { + + @Autowired + private ApplicationContext ctx; + + @Test(expected = BeanCreationException.class) + public void whenInstantiating_shouldThrowBCE() throws Exception { + ctx.getBean(InvalidInitExampleBean.class); + } + + @Test + public void whenPostConstruct_shouldLogEnv() throws Exception { + ctx.getBean(PostConstructExampleBean.class); + } + + @Test + public void whenConstructorInjection_shouldLogEnv() throws Exception { + ctx.getBean(LogicInConstructorExampleBean.class); + } + + @Test + public void whenInitializingBean_shouldLogEnv() throws Exception { + ctx.getBean(InitializingBeanExampleBean.class); + } + + @Test + public void whenApplicationListener_shouldRunOnce() throws Exception { + Assertions.assertThat(StartupApplicationListenerExample.counter).isEqualTo(1); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java new file mode 100644 index 0000000000..3dfd4835df --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.startup; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:startupConfig.xml") +public class SpringStartupXMLConfigIntegrationTest { + + @Autowired + private ApplicationContext ctx; + + @Test + public void whenPostConstruct_shouldLogEnv() throws Exception { + ctx.getBean(InitMethodExampleBean.class); + } + + @Test + public void whenAllStrategies_shouldLogOrder() throws Exception { + ctx.getBean(AllStrategiesExampleBean.class); + } +} From 013c4917d2b5df78d844b86d00b56379a046db48 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:30:45 +0530 Subject: [PATCH 6/7] JAVA-628: Corrected README, moved article code to appropriate module --- spring-di/README.md | 2 + .../AnotherArbitraryDependency.java | 13 ------ .../dependency/ArbitraryDependency.java | 13 ------ .../YetAnotherArbitraryDependency.java | 13 ------ .../FieldAutowiredIntegrationTest.java | 29 ------------- .../FieldAutowiredNameIntegrationTest.java | 29 ------------- ...ieldQualifierAutowiredIntegrationTest.java | 41 ------------------- .../ApplicationContextTestAutowiredName.java | 9 ---- ...licationContextTestAutowiredQualifier.java | 24 ----------- .../ApplicationContextTestAutowiredType.java | 15 ------- .../ApplicationContextTestInjectName.java | 16 -------- ...ApplicationContextTestInjectQualifier.java | 22 ---------- .../ApplicationContextTestInjectType.java | 15 ------- .../FieldByNameInjectIntegrationTest.java | 32 --------------- .../inject/FieldInjectIntegrationTest.java | 30 -------------- .../FieldQualifierInjectIntegrationTest.java | 41 ------------------- 16 files changed, 2 insertions(+), 342 deletions(-) delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java diff --git a/spring-di/README.md b/spring-di/README.md index 7571b12916..d470768f16 100644 --- a/spring-di/README.md +++ b/spring-di/README.md @@ -13,3 +13,5 @@ This module contains articles about dependency injection with Spring - [Controlling Bean Creation Order with @DependsOn Annotation](https://www.baeldung.com/spring-depends-on) - [Unsatisfied Dependency in Spring](https://www.baeldung.com/spring-unsatisfied-dependency) - [Circular Dependencies in Spring](https://www.baeldung.com/circular-dependencies-in-spring) +- [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) +- More articles: [[next -->]](/spring-di-2) diff --git a/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java deleted file mode 100644 index 0e19523b7e..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component -public class AnotherArbitraryDependency extends ArbitraryDependency { - - private final String label = "Another Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java deleted file mode 100644 index 3c90492d2c..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component(value = "autowiredFieldDependency") -public class ArbitraryDependency { - - private final String label = "Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java deleted file mode 100644 index a88abd0924..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component -public class YetAnotherArbitraryDependency extends ArbitraryDependency { - - private final String label = "Yet Another Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java deleted file mode 100644 index a78799f1d9..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredType; -import com.baeldung.dependency.ArbitraryDependency; -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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredType.class) -public class FieldAutowiredIntegrationTest { - - @Autowired - private ArbitraryDependency fieldDependency; - - @Test - public void givenAutowired_WhenSetOnField_ThenDependencyResolved() { - assertNotNull(fieldDependency); - assertEquals("Arbitrary Dependency", fieldDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java deleted file mode 100644 index 8f09e73c33..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredName; -import com.baeldung.dependency.ArbitraryDependency; -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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredName.class) -public class FieldAutowiredNameIntegrationTest { - - @Autowired - private ArbitraryDependency autowiredFieldDependency; - - @Test - public void givenAutowiredAnnotation_WhenOnField_ThenDependencyValid() { - assertNotNull(autowiredFieldDependency); - assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java deleted file mode 100644 index 01317aef6f..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredQualifier; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredQualifier.class) -public class FieldQualifierAutowiredIntegrationTest { - - @Autowired - @Qualifier("autowiredFieldDependency") - private ArbitraryDependency fieldDependency1; - - @Autowired - @Qualifier("anotherAutowiredFieldDependency") - private ArbitraryDependency fieldDependency2; - - @Test - public void givenAutowiredQualifier_WhenOnField_ThenDep1Valid() { - assertNotNull(fieldDependency1); - assertEquals("Arbitrary Dependency", fieldDependency1.toString()); - } - - @Test - public void givenAutowiredQualifier_WhenOnField_ThenDep2Valid() { - assertNotNull(fieldDependency2); - assertEquals("Another Arbitrary Dependency", fieldDependency2.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java deleted file mode 100644 index 48c4495465..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = {"com.baeldung.dependency"}) -public class ApplicationContextTestAutowiredName { -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java deleted file mode 100644 index ef6690ab4b..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.AnotherArbitraryDependency; -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestAutowiredQualifier { - - @Bean - public ArbitraryDependency autowiredFieldDependency() { - ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); - - return autowiredFieldDependency; - } - - @Bean - public ArbitraryDependency anotherAutowiredFieldDependency() { - ArbitraryDependency anotherAutowiredFieldDependency = new AnotherArbitraryDependency(); - - return anotherAutowiredFieldDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java deleted file mode 100644 index 240bc466b7..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestAutowiredType { - - @Bean - public ArbitraryDependency autowiredFieldDependency() { - ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); - return autowiredFieldDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java deleted file mode 100644 index 851aa0b8ee..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import com.baeldung.dependency.YetAnotherArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectName { - - @Bean - public ArbitraryDependency yetAnotherFieldInjectDependency() { - ArbitraryDependency yetAnotherFieldInjectDependency = new YetAnotherArbitraryDependency(); - return yetAnotherFieldInjectDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java deleted file mode 100644 index 59af5a91bb..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.AnotherArbitraryDependency; -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectQualifier { - - @Bean - public ArbitraryDependency defaultFile() { - ArbitraryDependency defaultFile = new ArbitraryDependency(); - return defaultFile; - } - - @Bean - public ArbitraryDependency namedFile() { - ArbitraryDependency namedFile = new AnotherArbitraryDependency(); - return namedFile; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java deleted file mode 100644 index 1e1f01f269..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectType { - - @Bean - public ArbitraryDependency injectDependency() { - ArbitraryDependency injectDependency = new ArbitraryDependency(); - return injectDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java deleted file mode 100644 index f5897febab..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectName; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; -import javax.inject.Named; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectName.class) -public class FieldByNameInjectIntegrationTest { - - @Inject - @Named("yetAnotherFieldInjectDependency") - private ArbitraryDependency yetAnotherFieldInjectDependency; - - @Test - public void givenInjectQualifier_WhenSetOnField_ThenDependencyValid() { - assertNotNull(yetAnotherFieldInjectDependency); - assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java deleted file mode 100644 index 45b7c8015c..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectType; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectType.class) -public class FieldInjectIntegrationTest { - - @Inject - private ArbitraryDependency fieldInjectDependency; - - @Test - public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { - assertNotNull(fieldInjectDependency); - assertEquals("Arbitrary Dependency", fieldInjectDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java deleted file mode 100644 index 0fd6a0e4c1..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectQualifier; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectQualifier.class) -public class FieldQualifierInjectIntegrationTest { - - @Inject - @Qualifier("defaultFile") - private ArbitraryDependency defaultDependency; - - @Inject - @Qualifier("namedFile") - private ArbitraryDependency namedDependency; - - @Test - public void givenInjectQualifier_WhenOnField_ThenDefaultFileValid() { - assertNotNull(defaultDependency); - assertEquals("Arbitrary Dependency", defaultDependency.toString()); - } - - @Test - public void givenInjectQualifier_WhenOnField_ThenNamedFileValid() { - assertNotNull(defaultDependency); - assertEquals("Another Arbitrary Dependency", namedDependency.toString()); - } -} From f3c3086b0793c88cc1c10dfae9a59f558fc1c831 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:31:47 +0530 Subject: [PATCH 7/7] JAVA-628: Moved 3 articles to spring-di-2, added README --- spring-di-2/README.md | 11 ++++ spring-di-2/pom.xml | 16 +++++ .../com/baeldung/collection/BaeldungBean.java | 18 ++++++ .../baeldung/collection/CollectionConfig.java | 50 +++++++++++++++ .../collection/CollectionInjectionDemo.java | 21 +++++++ .../baeldung/collection/CollectionsBean.java | 62 +++++++++++++++++++ .../AnotherArbitraryDependency.java | 13 ++++ .../dependency/ArbitraryDependency.java | 13 ++++ .../YetAnotherArbitraryDependency.java | 13 ++++ .../staticvalue/injection/Application.java | 17 +++++ .../injection/PropertyController.java | 30 +++++++++ .../src/main/resources/application.properties | 1 + .../ApplicationContextTestAutowiredName.java | 9 +++ ...licationContextTestAutowiredQualifier.java | 25 ++++++++ .../ApplicationContextTestAutowiredType.java | 16 +++++ .../ApplicationContextTestInjectName.java | 17 +++++ ...ApplicationContextTestInjectQualifier.java | 23 +++++++ .../ApplicationContextTestInjectType.java | 16 +++++ ...pplicationContextTestResourceNameType.java | 16 +++++ ...plicationContextTestResourceQualifier.java | 22 +++++++ .../FieldAutowiredIntegrationTest.java | 30 +++++++++ .../FieldAutowiredNameIntegrationTest.java | 30 +++++++++ ...ieldQualifierAutowiredIntegrationTest.java | 42 +++++++++++++ .../FieldByNameInjectIntegrationTest.java | 33 ++++++++++ .../inject/FieldInjectIntegrationTest.java | 31 ++++++++++ .../FieldQualifierInjectIntegrationTest.java | 42 +++++++++++++ ...FieldResourceInjectionIntegrationTest.java | 32 ++++++++++ ...hodByQualifierResourceIntegrationTest.java | 46 ++++++++++++++ .../MethodByTypeResourceIntegrationTest.java | 35 +++++++++++ ...ethodResourceInjectionIntegrationTest.java | 35 +++++++++++ .../NamedResourceIntegrationTest.java | 30 +++++++++ ...ifierResourceInjectionIntegrationTest.java | 43 +++++++++++++ ...etterResourceInjectionIntegrationTest.java | 34 ++++++++++ 33 files changed, 872 insertions(+) create mode 100644 spring-di-2/README.md create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java create mode 100644 spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java create mode 100644 spring-di-2/src/main/resources/application.properties create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java diff --git a/spring-di-2/README.md b/spring-di-2/README.md new file mode 100644 index 0000000000..15249efa7c --- /dev/null +++ b/spring-di-2/README.md @@ -0,0 +1,11 @@ +## Spring Dependency Injection + +This module contains articles about dependency injection with Spring + +### Relevant Articles + +- [Injecting Spring Beans into Unmanaged Objects](https://www.baeldung.com/spring-inject-bean-into-unmanaged-objects) +- [Injecting a Value in a Static Field in Spring](https://www.baeldung.com/spring-inject-static-field) +- [Spring – Injecting Collections](https://www.baeldung.com/spring-injecting-collections) +- [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) +- More articles: [[<-- prev]](/spring-di) \ No newline at end of file diff --git a/spring-di-2/pom.xml b/spring-di-2/pom.xml index 9b703d55d9..4dd92ca18c 100644 --- a/spring-di-2/pom.xml +++ b/spring-di-2/pom.xml @@ -25,11 +25,26 @@ spring-boot-starter-data-jpa ${spring-boot.version} + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + org.springframework spring-aspects ${spring.version} + + org.projectlombok + lombok + ${lombok.version} + + + javax.inject + javax.inject + ${javax.inject.version} + @@ -61,5 +76,6 @@ 2.3.1.RELEASE 1.11 + 1 \ No newline at end of file diff --git a/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java b/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java new file mode 100644 index 0000000000..6d7351df02 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java @@ -0,0 +1,18 @@ +package com.baeldung.collection; + +/** + * Created by Gebruiker on 5/22/2018. + */ +public class BaeldungBean { + + private String name; + + public BaeldungBean(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java new file mode 100644 index 0000000000..fbae2963e5 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java @@ -0,0 +1,50 @@ +package com.baeldung.collection; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; + +import java.util.*; + +@Configuration +public class CollectionConfig { + + @Bean + public CollectionsBean getCollectionsBean() { + return new CollectionsBean(new HashSet<>(Arrays.asList("John", "Adam", "Harry"))); + } + + @Bean + public List nameList(){ + return Arrays.asList("John", "Adam", "Harry", null); + } + + @Bean + public Map nameMap(){ + Map nameMap = new HashMap<>(); + nameMap.put(1, "John"); + nameMap.put(2, "Adam"); + nameMap.put(3, "Harry"); + return nameMap; + } + + @Bean + @Qualifier("CollectionsBean") + @Order(2) + public BaeldungBean getElement() { + return new BaeldungBean("John"); + } + + @Bean + @Order(3) + public BaeldungBean getAnotherElement() { + return new BaeldungBean("Adam"); + } + + @Bean + @Order(1) + public BaeldungBean getOneMoreElement() { + return new BaeldungBean("Harry"); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java new file mode 100644 index 0000000000..2ee265f134 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java @@ -0,0 +1,21 @@ +package com.baeldung.collection; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * Created by Gebruiker on 5/18/2018. + */ +public class CollectionInjectionDemo { + + public static void main(String[] args) { + + ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); + CollectionsBean collectionsBean = context.getBean(CollectionsBean.class); + collectionsBean.printNameList(); + collectionsBean.printNameSet(); + collectionsBean.printNameMap(); + collectionsBean.printBeanList(); + collectionsBean.printNameListWithDefaults(); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java new file mode 100644 index 0000000000..fc90f2c6ff --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java @@ -0,0 +1,62 @@ +package com.baeldung.collection; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; + +/** + * Created by Gebruiker on 5/18/2018. + */ +public class CollectionsBean { + + @Autowired + private List nameList; + + private Set nameSet; + + private Map nameMap; + + @Autowired(required = false) + @Qualifier("CollectionsBean") + private List beanList = new ArrayList<>(); + + @Value("${names.list:}#{T(java.util.Collections).emptyList()}") + private List nameListWithDefaultValue; + + public CollectionsBean() { + } + + public CollectionsBean(Set strings) { + this.nameSet = strings; + } + + @Autowired + public void setNameMap(Map nameMap) { + this.nameMap = nameMap; + } + + public void printNameList() { + System.out.println(nameList); + } + + public void printNameSet() { + System.out.println(nameSet); + } + + public void printNameMap() { + System.out.println(nameMap); + } + + public void printBeanList() { + System.out.println(beanList); + } + + public void printNameListWithDefaults() { + System.out.println(nameListWithDefaultValue); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java new file mode 100644 index 0000000000..0e19523b7e --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class AnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java new file mode 100644 index 0000000000..3c90492d2c --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component(value = "autowiredFieldDependency") +public class ArbitraryDependency { + + private final String label = "Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java new file mode 100644 index 0000000000..a88abd0924 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class YetAnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Yet Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java new file mode 100644 index 0000000000..b4222ddcc9 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java @@ -0,0 +1,17 @@ +package com.baeldung.staticvalue.injection; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.PropertySource; + +@SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) +@PropertySource("/application.properties") + +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java new file mode 100644 index 0000000000..f5910ea4f8 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java @@ -0,0 +1,30 @@ +package com.baeldung.staticvalue.injection; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; + +@RestController +public class PropertyController { + + @Value("${name}") + private String name; + + @Value("${name}") + private static String NAME_NULL; + + private static String NAME_STATIC; + + @Value("${name}") + public void setNameStatic(String name){ + PropertyController.NAME_STATIC = name; + } + + @GetMapping("/properties") + public List getProperties(){ + return Arrays.asList(this.name, NAME_STATIC, NAME_NULL) ; + } +} diff --git a/spring-di-2/src/main/resources/application.properties b/spring-di-2/src/main/resources/application.properties new file mode 100644 index 0000000000..828fa9cd2a --- /dev/null +++ b/spring-di-2/src/main/resources/application.properties @@ -0,0 +1 @@ +name = Inject a value to a static field diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java new file mode 100644 index 0000000000..3046e68829 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java @@ -0,0 +1,9 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = {"com.baeldung.dependency"}) +public class ApplicationContextTestAutowiredName { +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java new file mode 100644 index 0000000000..33969ea69d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java @@ -0,0 +1,25 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.AnotherArbitraryDependency; +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestAutowiredQualifier { + + @Bean + public ArbitraryDependency autowiredFieldDependency() { + ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); + + return autowiredFieldDependency; + } + + @Bean + public ArbitraryDependency anotherAutowiredFieldDependency() { + ArbitraryDependency anotherAutowiredFieldDependency = new AnotherArbitraryDependency(); + + return anotherAutowiredFieldDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java new file mode 100644 index 0000000000..24cdd978e4 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestAutowiredType { + + @Bean + public ArbitraryDependency autowiredFieldDependency() { + ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); + return autowiredFieldDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java new file mode 100644 index 0000000000..cb465d0183 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java @@ -0,0 +1,17 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.dependency.YetAnotherArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectName { + + @Bean + public ArbitraryDependency yetAnotherFieldInjectDependency() { + ArbitraryDependency yetAnotherFieldInjectDependency = new YetAnotherArbitraryDependency(); + return yetAnotherFieldInjectDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java new file mode 100644 index 0000000000..c2a63dac9e --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java @@ -0,0 +1,23 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.AnotherArbitraryDependency; +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectQualifier { + + @Bean + public ArbitraryDependency defaultFile() { + ArbitraryDependency defaultFile = new ArbitraryDependency(); + return defaultFile; + } + + @Bean + public ArbitraryDependency namedFile() { + ArbitraryDependency namedFile = new AnotherArbitraryDependency(); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java new file mode 100644 index 0000000000..15a75b8f2d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectType { + + @Bean + public ArbitraryDependency injectDependency() { + ArbitraryDependency injectDependency = new ArbitraryDependency(); + return injectDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java new file mode 100644 index 0000000000..708ade7647 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.File; + +@Configuration +public class ApplicationContextTestResourceNameType { + + @Bean(name = "namedFile") + public File namedFile() { + File namedFile = new File("namedFile.txt"); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java new file mode 100644 index 0000000000..87864b183e --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java @@ -0,0 +1,22 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.File; + +@Configuration +public class ApplicationContextTestResourceQualifier { + + @Bean(name = "defaultFile") + public File defaultFile() { + File defaultFile = new File("defaultFile.txt"); + return defaultFile; + } + + @Bean(name = "namedFile") + public File namedFile() { + File namedFile = new File("namedFile.txt"); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java new file mode 100644 index 0000000000..f3f065ed4d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +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.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredType.class) +public class FieldAutowiredIntegrationTest { + + @Autowired + private ArbitraryDependency fieldDependency; + + @Test + public void givenAutowired_WhenSetOnField_ThenDependencyResolved() { + assertNotNull(fieldDependency); + assertEquals("Arbitrary Dependency", fieldDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java new file mode 100644 index 0000000000..199241c7e2 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.autowired; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredName; + +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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredName.class) +public class FieldAutowiredNameIntegrationTest { + + @Autowired + private ArbitraryDependency autowiredFieldDependency; + + @Test + public void givenAutowiredAnnotation_WhenOnField_ThenDependencyValid() { + assertNotNull(autowiredFieldDependency); + assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java new file mode 100644 index 0000000000..081fbf24ad --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java @@ -0,0 +1,42 @@ +package com.baeldung.wiring.configuration.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredQualifier; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredQualifier.class) +public class FieldQualifierAutowiredIntegrationTest { + + @Autowired + @Qualifier("autowiredFieldDependency") + private ArbitraryDependency fieldDependency1; + + @Autowired + @Qualifier("anotherAutowiredFieldDependency") + private ArbitraryDependency fieldDependency2; + + @Test + public void givenAutowiredQualifier_WhenOnField_ThenDep1Valid() { + assertNotNull(fieldDependency1); + assertEquals("Arbitrary Dependency", fieldDependency1.toString()); + } + + @Test + public void givenAutowiredQualifier_WhenOnField_ThenDep2Valid() { + assertNotNull(fieldDependency2); + assertEquals("Another Arbitrary Dependency", fieldDependency2.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java new file mode 100644 index 0000000000..d1a75d73ea --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectName; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectName.class) +public class FieldByNameInjectIntegrationTest { + + @Inject + @Named("yetAnotherFieldInjectDependency") + private ArbitraryDependency yetAnotherFieldInjectDependency; + + @Test + public void givenInjectQualifier_WhenSetOnField_ThenDependencyValid() { + assertNotNull(yetAnotherFieldInjectDependency); + assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java new file mode 100644 index 0000000000..995f560701 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectType.class) +public class FieldInjectIntegrationTest { + + @Inject + private ArbitraryDependency fieldInjectDependency; + + @Test + public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { + assertNotNull(fieldInjectDependency); + assertEquals("Arbitrary Dependency", fieldInjectDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java new file mode 100644 index 0000000000..67fa2bf3d4 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java @@ -0,0 +1,42 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectQualifier; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectQualifier.class) +public class FieldQualifierInjectIntegrationTest { + + @Inject + @Qualifier("defaultFile") + private ArbitraryDependency defaultDependency; + + @Inject + @Qualifier("namedFile") + private ArbitraryDependency namedDependency; + + @Test + public void givenInjectQualifier_WhenOnField_ThenDefaultFileValid() { + assertNotNull(defaultDependency); + assertEquals("Arbitrary Dependency", defaultDependency.toString()); + } + + @Test + public void givenInjectQualifier_WhenOnField_ThenNamedFileValid() { + assertNotNull(defaultDependency); + assertEquals("Another Arbitrary Dependency", namedDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..938d557939 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java @@ -0,0 +1,32 @@ +package com.baeldung.wiring.configuration.resource; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class FieldResourceInjectionIntegrationTest { + + @Resource(name = "namedFile") + private File defaultFile; + + @Test + public void givenResourceAnnotation_WhenOnField_ThenDependencyValid() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java new file mode 100644 index 0000000000..f49bf70aba --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java @@ -0,0 +1,46 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceQualifier; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceQualifier.class) +public class MethodByQualifierResourceIntegrationTest { + + private File arbDependency; + private File anotherArbDependency; + + @Test + public void givenResourceQualifier_WhenSetter_ThenValidDependencies() { + assertNotNull(arbDependency); + assertEquals("namedFile.txt", arbDependency.getName()); + assertNotNull(anotherArbDependency); + assertEquals("defaultFile.txt", anotherArbDependency.getName()); + } + + @Resource + @Qualifier("namedFile") + public void setArbDependency(File arbDependency) { + this.arbDependency = arbDependency; + } + + @Resource + @Qualifier("defaultFile") + public void setAnotherArbDependency(File anotherArbDependency) { + this.anotherArbDependency = anotherArbDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java new file mode 100644 index 0000000000..aecd02a1d5 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class MethodByTypeResourceIntegrationTest { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenSetter_ThenValidDependency() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..4ef9368c28 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class MethodResourceInjectionIntegrationTest { + + private File defaultFile; + + @Resource(name = "namedFile") + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenSetter_ThenDependencyValid() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java new file mode 100644 index 0000000000..4339194f63 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class NamedResourceIntegrationTest { + + @Resource(name = "namedFile") + private File testFile; + + @Test + public void givenResourceAnnotation_WhenOnField_THEN_DEPENDENCY_Found() { + assertNotNull(testFile); + assertEquals("namedFile.txt", testFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..cc8c669757 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java @@ -0,0 +1,43 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceQualifier; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceQualifier.class) +public class QualifierResourceInjectionIntegrationTest { + + @Resource + @Qualifier("defaultFile") + private File dependency1; + + @Resource + @Qualifier("namedFile") + private File dependency2; + + @Test + public void givenResourceAnnotation_WhenField_ThenDependency1Valid() { + assertNotNull(dependency1); + assertEquals("defaultFile.txt", dependency1.getName()); + } + + @Test + public void givenResourceQualifier_WhenField_ThenDependency2Valid() { + assertNotNull(dependency2); + assertEquals("namedFile.txt", dependency2.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..90c8677bff --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class SetterResourceInjectionIntegrationTest { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenOnSetter_THEN_MUST_INJECT_Dependency() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +}