diff --git a/pom.xml b/pom.xml
index 24aa678523..6daf0e3fa5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1246,6 +1246,7 @@
core-java-modules/core-java-networking-3
core-java-modules/core-java-strings
core-java-modules/core-java-httpclient
+ spring-core-6
ddd-contexts
docker-modules
apache-httpclient-2
@@ -1328,6 +1329,7 @@
testing-modules/testing-assertions
persistence-modules/fauna
lightrun
+ spring-core-6
@@ -1400,4 +1402,4 @@
31.0.1-jre
-
+
\ No newline at end of file
diff --git a/spring-core-6/pom.xml b/spring-core-6/pom.xml
new file mode 100644
index 0000000000..92cd343234
--- /dev/null
+++ b/spring-core-6/pom.xml
@@ -0,0 +1,76 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ spring-core-6
+ 0.0.1-SNAPSHOT
+ spring-core-6
+ http://www.baeldung.com
+
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.0.0.RELEASE
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+ maven-resources-plugin
+ 3.0.2
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ maven-surefire-plugin
+ 2.22.1
+
+
+ maven-jar-plugin
+ 3.0.2
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ maven-site-plugin
+ 3.7.1
+
+
+ maven-project-info-reports-plugin
+ 3.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java
new file mode 100644
index 0000000000..04fa6577ac
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java
@@ -0,0 +1,17 @@
+package com.baeldung.multibeaninstantiation.solution1;
+
+public class Person {
+ private String firstName;
+ private String lastName;
+
+ public Person(String firstName, String secondName) {
+ super();
+ this.firstName = firstName;
+ this.lastName = secondName;
+ }
+
+ @Override
+ public String toString() {
+ return "Person [firstName=" + firstName + ", secondName=" + lastName + "]";
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java
new file mode 100644
index 0000000000..ac05ffc0fa
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java
@@ -0,0 +1,17 @@
+package com.baeldung.multibeaninstantiation.solution1;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class PersonConfig {
+ @Bean
+ public Person personOne() {
+ return new Person("Harold", "Finch");
+ }
+
+ @Bean
+ public Person personTwo() {
+ return new Person("John", "Reese");
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java
new file mode 100644
index 0000000000..c2bc70f3ba
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java
@@ -0,0 +1,11 @@
+package com.baeldung.multibeaninstantiation.solution1;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringApp1 {
+ public static void main(String[] args) {
+ SpringApplication.run(SpringApp1.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java
new file mode 100644
index 0000000000..a1801d1fd2
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java
@@ -0,0 +1,17 @@
+package com.baeldung.multibeaninstantiation.solution2;
+
+public class Person {
+ private String firstName;
+ private String lastName;
+
+ public Person(String firstName, String secondName) {
+ super();
+ this.firstName = firstName;
+ this.lastName = secondName;
+ }
+
+ @Override
+ public String toString() {
+ return "Person [firstName=" + firstName + ", secondName=" + lastName + "]";
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java
new file mode 100644
index 0000000000..da97314579
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java
@@ -0,0 +1,10 @@
+package com.baeldung.multibeaninstantiation.solution2;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan("com.baeldung.multibeaninstantiation.solution2")
+public class PersonConfig {
+
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java
new file mode 100644
index 0000000000..5d56082f71
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java
@@ -0,0 +1,13 @@
+package com.baeldung.multibeaninstantiation.solution2;
+
+import org.springframework.stereotype.Component;
+
+import com.baeldung.multibeaninstantiation.solution2.Person;
+
+@Component
+public class PersonOne extends Person {
+
+ public PersonOne() {
+ super("Harold", "Finch");
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java
new file mode 100644
index 0000000000..436bd0e96e
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java
@@ -0,0 +1,13 @@
+package com.baeldung.multibeaninstantiation.solution2;
+
+import org.springframework.stereotype.Component;
+
+import com.baeldung.multibeaninstantiation.solution2.Person;
+
+@Component
+public class PersonTwo extends Person {
+
+ public PersonTwo() {
+ super("John", "Reese");
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java
new file mode 100644
index 0000000000..328ba32777
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java
@@ -0,0 +1,11 @@
+package com.baeldung.multibeaninstantiation.solution2;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringApp2 {
+ public static void main(String[] args) {
+ SpringApplication.run(SpringApp2.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java
new file mode 100644
index 0000000000..d73bd9dfdc
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java
@@ -0,0 +1,33 @@
+package com.baeldung.multibeaninstantiation.solution3;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.Assert;
+
+public class Human implements InitializingBean {
+
+ private Person personOne;
+
+ private Person personTwo;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ Assert.notNull(personOne, "Harold is alive!");
+ Assert.notNull(personTwo, "John is alive!");
+ }
+
+ /* Setter injection */
+ @Autowired
+ public void setPersonOne(Person personOne) {
+ this.personOne = personOne;
+ this.personOne.setFirstName("Harold");
+ this.personOne.setSecondName("Finch");
+ }
+
+ @Autowired
+ public void setPersonTwo(Person personTwo) {
+ this.personTwo = personTwo;
+ this.personTwo.setFirstName("John");
+ this.personTwo.setSecondName("Reese");
+ }
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java
new file mode 100644
index 0000000000..1753d28d7e
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java
@@ -0,0 +1,9 @@
+package com.baeldung.multibeaninstantiation.solution3;
+
+import java.util.List;
+
+public interface MultiBeanFactory {
+ List getObject(String name) throws Exception;
+
+ Class> getObjectType();
+}
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java
new file mode 100644
index 0000000000..a26aee121f
--- /dev/null
+++ b/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java
@@ -0,0 +1,49 @@
+package com.baeldung.multibeaninstantiation.solution3;
+
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+@Qualifier(value = "personOne, personTwo")
+public class Person implements FactoryBean