diff --git a/2024-09/spring-03-config/.gitignore b/2024-09/spring-03-config/.gitignore
new file mode 100644
index 00000000..4ea52072
--- /dev/null
+++ b/2024-09/spring-03-config/.gitignore
@@ -0,0 +1,24 @@
+target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
diff --git a/2024-09/spring-03-config/pom.xml b/2024-09/spring-03-config/pom.xml
new file mode 100644
index 00000000..a3108dd4
--- /dev/null
+++ b/2024-09/spring-03-config/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-03
+ 1.0
+
+ pom
+
+
+ spring-03-exercise
+ spring-03-solution
+
+
diff --git a/2024-09/spring-03-config/spring-03-exercise/pom.xml b/2024-09/spring-03-config/spring-03-exercise/pom.xml
new file mode 100644
index 00000000..de795a09
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-03-exercise
+ 1.0
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ org.springframework
+ spring-context
+ 6.1.13
+
+
+
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/Main.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..7a5028d6
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,17 @@
+package ru.otus.spring;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import ru.otus.spring.domain.Person;
+import ru.otus.spring.service.PersonService;
+
+public class Main {
+
+ public static void main(String[] args) {
+ AnnotationConfigApplicationContext context = null;
+
+ PersonService service = context.getBean(PersonService.class);
+
+ Person ivan = service.getByName("Ivan");
+ System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge());
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java
new file mode 100644
index 00000000..f88727b7
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java
@@ -0,0 +1,11 @@
+package ru.otus.spring.config;
+
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.dao.PersonDaoSimple;
+
+public class DaoConfig {
+
+ public PersonDao personDaoSimple() {
+ return new PersonDaoSimple();
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java
new file mode 100644
index 00000000..4443f064
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java
@@ -0,0 +1,12 @@
+package ru.otus.spring.config;
+
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.service.PersonService;
+import ru.otus.spring.service.PersonServiceImpl;
+
+public class ServicesConfig {
+
+ public PersonService personService(PersonDao dao) {
+ return new PersonServiceImpl(dao);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java
new file mode 100644
index 00000000..d33939bd
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java
@@ -0,0 +1,8 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public interface PersonDao {
+
+ Person findByName(String name);
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java
new file mode 100644
index 00000000..7f7c97c6
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java
@@ -0,0 +1,10 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public class PersonDaoSimple implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 18);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java
new file mode 100644
index 00000000..c9359625
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java
@@ -0,0 +1,10 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public class PersonDaoSmart implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 21);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java
new file mode 100644
index 00000000..c23be0c6
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java
@@ -0,0 +1,20 @@
+package ru.otus.spring.domain;
+
+public class Person {
+
+ private final String name;
+ private final int age;
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java
new file mode 100644
index 00000000..9b83e7de
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java
@@ -0,0 +1,8 @@
+package ru.otus.spring.service;
+
+import ru.otus.spring.domain.Person;
+
+public interface PersonService {
+
+ Person getByName(String name);
+}
diff --git a/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java
new file mode 100644
index 00000000..794c29dd
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java
@@ -0,0 +1,17 @@
+package ru.otus.spring.service;
+
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.domain.Person;
+
+public class PersonServiceImpl implements PersonService {
+
+ private final PersonDao dao;
+
+ public PersonServiceImpl(PersonDao dao) {
+ this.dao = dao;
+ }
+
+ public Person getByName(String name) {
+ return dao.findByName(name);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/pom.xml b/2024-09/spring-03-config/spring-03-solution/pom.xml
new file mode 100644
index 00000000..a7c208f5
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-03-solution
+ 1.0
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ org.springframework
+ spring-context
+ 6.1.13
+
+
+
+
+
+
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/Main.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..59e2765c
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,22 @@
+package ru.otus.spring;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import ru.otus.spring.domain.Person;
+import ru.otus.spring.service.PersonService;
+
+@Configuration
+@ComponentScan
+public class Main {
+
+ public static void main(String[] args) {
+ AnnotationConfigApplicationContext context =
+ new AnnotationConfigApplicationContext(Main.class);
+
+ PersonService service = context.getBean(PersonService.class);
+
+ Person ivan = service.getByName("Ivan");
+ System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge());
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java
new file mode 100644
index 00000000..74502e93
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java
@@ -0,0 +1,21 @@
+package ru.otus.spring.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.dao.PersonDaoSimple;
+import ru.otus.spring.dao.PersonDaoSmart;
+
+@Configuration
+public class DaoConfig {
+
+ @Bean
+ public PersonDao personDaoSimple() {
+ return new PersonDaoSimple();
+ }
+
+ @Bean
+ public PersonDao personDaoSmart() {
+ return new PersonDaoSmart();
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java
new file mode 100644
index 00000000..ece9ec7e
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java
@@ -0,0 +1,17 @@
+package ru.otus.spring.config;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.service.PersonService;
+import ru.otus.spring.service.PersonServiceImpl;
+
+@Configuration
+public class ServicesConfig {
+
+ @Bean
+ public PersonService personService(@Qualifier("personDaoSmart") PersonDao dao) {
+ return new PersonServiceImpl(dao);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java
new file mode 100644
index 00000000..d33939bd
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java
@@ -0,0 +1,8 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public interface PersonDao {
+
+ Person findByName(String name);
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java
new file mode 100644
index 00000000..7f7c97c6
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java
@@ -0,0 +1,10 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public class PersonDaoSimple implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 18);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java
new file mode 100644
index 00000000..c9359625
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSmart.java
@@ -0,0 +1,10 @@
+package ru.otus.spring.dao;
+
+import ru.otus.spring.domain.Person;
+
+public class PersonDaoSmart implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 21);
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java
new file mode 100644
index 00000000..c23be0c6
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java
@@ -0,0 +1,20 @@
+package ru.otus.spring.domain;
+
+public class Person {
+
+ private final String name;
+ private final int age;
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java
new file mode 100644
index 00000000..9b83e7de
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java
@@ -0,0 +1,8 @@
+package ru.otus.spring.service;
+
+import ru.otus.spring.domain.Person;
+
+public interface PersonService {
+
+ Person getByName(String name);
+}
diff --git a/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java
new file mode 100644
index 00000000..794c29dd
--- /dev/null
+++ b/2024-09/spring-03-config/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java
@@ -0,0 +1,17 @@
+package ru.otus.spring.service;
+
+import ru.otus.spring.dao.PersonDao;
+import ru.otus.spring.domain.Person;
+
+public class PersonServiceImpl implements PersonService {
+
+ private final PersonDao dao;
+
+ public PersonServiceImpl(PersonDao dao) {
+ this.dao = dao;
+ }
+
+ public Person getByName(String name) {
+ return dao.findByName(name);
+ }
+}