diff --git a/spring-core/src/main/java/com/baeldung/setterdi/Config.java b/spring-core/src/main/java/com/baeldung/setterdi/Config.java
new file mode 100644
index 0000000000..68c1ae12a2
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/Config.java
@@ -0,0 +1,35 @@
+package com.baeldung.setterdi;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+import com.baeldung.setterdi.domain.Engine;
+import com.baeldung.setterdi.domain.Trailer;
+import com.baeldung.setterdi.domain.Transmission;
+
+@Configuration
+@ComponentScan("com.baeldung.setterdi")
+public class Config {
+
+ @Bean
+ public Engine engine() {
+ Engine engine = new Engine();
+ engine.setType("v8");
+ engine.setVolume(5);
+ return engine;
+ }
+
+ @Bean
+ public Transmission transmission() {
+ Transmission transmission = new Transmission();
+ transmission.setType("sliding");
+ return transmission;
+ }
+
+ @Bean
+ public Trailer trailer() {
+ Trailer trailer = new Trailer();
+ return trailer;
+ }
+}
\ No newline at end of file
diff --git a/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java b/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java
new file mode 100644
index 0000000000..bc92b79e8a
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java
@@ -0,0 +1,33 @@
+package com.baeldung.setterdi;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import com.baeldung.setterdi.Config;
+import com.baeldung.setterdi.domain.Car;
+
+public class SpringRunner {
+ public static void main(String[] args) {
+ Car toyota = getCarFromXml();
+
+ System.out.println(toyota);
+
+ toyota = getCarFromJavaConfig();
+
+ System.out.println(toyota);
+
+ }
+
+ private static Car getCarFromJavaConfig() {
+ ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
+
+ return context.getBean(Car.class);
+ }
+
+ private static Car getCarFromXml() {
+ ApplicationContext context = new ClassPathXmlApplicationContext("setterdi.xml");
+
+ return context.getBean(Car.class);
+ }
+}
\ No newline at end of file
diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java
new file mode 100644
index 0000000000..749ff3984a
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java
@@ -0,0 +1,34 @@
+package com.baeldung.setterdi.domain;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Car {
+ private Engine engine;
+ private Transmission transmission;
+ private Trailer trailer;
+
+ public Car() {
+ }
+
+ @Autowired
+ public void setEngine(Engine engine) {
+ this.engine = engine;
+ }
+
+ @Autowired
+ public void setTransmission(Transmission transmission) {
+ this.transmission = transmission;
+ }
+
+ @Autowired
+ public void setTrailer(Trailer trailer) {
+ this.trailer = trailer;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("Engine: %s Transmission: %s Trailer: %s", engine, transmission, trailer);
+ }
+}
diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java
new file mode 100644
index 0000000000..50c247cacf
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java
@@ -0,0 +1,22 @@
+package com.baeldung.setterdi.domain;
+
+public class Engine {
+ private String type;
+ private int volume;
+
+ public Engine() {
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void setVolume(int volume) {
+ this.volume = volume;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s %d", type, volume);
+ }
+}
\ No newline at end of file
diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java
new file mode 100644
index 0000000000..616732309e
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java
@@ -0,0 +1,11 @@
+package com.baeldung.setterdi.domain;
+
+public class Trailer {
+ public Trailer() {
+ }
+
+ @Override
+ public String toString() {
+ return "Trailer";
+ }
+}
diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java
new file mode 100644
index 0000000000..18b62afdc1
--- /dev/null
+++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java
@@ -0,0 +1,17 @@
+package com.baeldung.setterdi.domain;
+
+public class Transmission {
+ private String type;
+
+ public Transmission() {
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s", type);
+ }
+}
diff --git a/spring-core/src/main/resources/constructordi.xml b/spring-core/src/main/resources/constructordi.xml
new file mode 100644
index 0000000000..231e72adcb
--- /dev/null
+++ b/spring-core/src/main/resources/constructordi.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-core/src/main/resources/setterdi.xml b/spring-core/src/main/resources/setterdi.xml
new file mode 100644
index 0000000000..8b7f0d41e7
--- /dev/null
+++ b/spring-core/src/main/resources/setterdi.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+