diff --git a/2019-08/spring-03/.gitignore b/2019-08/spring-03/.gitignore
new file mode 100644
index 00000000..e62c33c2
--- /dev/null
+++ b/2019-08/spring-03/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+*.iml
+
+target/
diff --git a/2019-08/spring-03/pom.xml b/2019-08/spring-03/pom.xml
new file mode 100644
index 00000000..a3108dd4
--- /dev/null
+++ b/2019-08/spring-03/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/2019-08/spring-03/spring-03-exercise/pom.xml b/2019-08/spring-03/spring-03-exercise/pom.xml
new file mode 100644
index 00000000..3574d73d
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-03-exercise
+ 1.0
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+ org.springframework
+ spring-context
+ 5.1.9.RELEASE
+
+
+
+ org.springframework
+ spring-aop
+ 5.1.9.RELEASE
+
+
+ org.aspectj
+ aspectjrt
+ 1.9.4
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.4
+
+
+
diff --git a/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/Main.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/Main.java
new file mode 100644
index 00000000..053c51c4
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/Main.java
@@ -0,0 +1,20 @@
+package ru.otus.spring03;
+
+import org.springframework.context.annotation.*;
+import ru.otus.spring03.domain.Person;
+import ru.otus.spring03.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/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDao.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDao.java
new file mode 100644
index 00000000..2a7e1903
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDao.java
@@ -0,0 +1,8 @@
+package ru.otus.spring03.dao;
+
+import ru.otus.spring03.domain.Person;
+
+public interface PersonDao {
+
+ Person findByName(String name);
+}
diff --git a/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java
new file mode 100644
index 00000000..64740885
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java
@@ -0,0 +1,12 @@
+package ru.otus.spring03.dao;
+
+import org.springframework.stereotype.Repository;
+import ru.otus.spring03.domain.Person;
+
+@Repository
+public class PersonDaoSimple implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 18);
+ }
+}
diff --git a/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/domain/Person.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/domain/Person.java
new file mode 100644
index 00000000..22fd88d6
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/domain/Person.java
@@ -0,0 +1,20 @@
+package ru.otus.spring03.domain;
+
+public class Person {
+
+ private String name;
+ private 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/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/logging/LoggingAspect.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/logging/LoggingAspect.java
new file mode 100644
index 00000000..946bf3a9
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/logging/LoggingAspect.java
@@ -0,0 +1,13 @@
+package ru.otus.spring03.logging;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+public class LoggingAspect {
+
+ public void logBefore(JoinPoint joinPoint) {
+ System.out.println("Вызов метода : " + joinPoint.getSignature().getName());
+ }
+}
diff --git a/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonService.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonService.java
new file mode 100644
index 00000000..815f7c0a
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonService.java
@@ -0,0 +1,8 @@
+package ru.otus.spring03.service;
+
+import ru.otus.spring03.domain.Person;
+
+public interface PersonService {
+
+ Person getByName(String name);
+}
diff --git a/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java
new file mode 100644
index 00000000..1c9ba93b
--- /dev/null
+++ b/2019-08/spring-03/spring-03-exercise/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java
@@ -0,0 +1,19 @@
+package ru.otus.spring03.service;
+
+import org.springframework.stereotype.Service;
+import ru.otus.spring03.dao.PersonDao;
+import ru.otus.spring03.domain.Person;
+
+@Service
+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/2019-08/spring-03/spring-03-solution/pom.xml b/2019-08/spring-03/spring-03-solution/pom.xml
new file mode 100644
index 00000000..7a157288
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-03-solution
+ 1.0
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+ org.springframework
+ spring-context
+ 5.1.9.RELEASE
+
+
+
+ org.springframework
+ spring-aop
+ 5.1.9.RELEASE
+
+
+ org.aspectj
+ aspectjrt
+ 1.9.4
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.4
+
+
+
diff --git a/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/Main.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/Main.java
new file mode 100644
index 00000000..c3cb2647
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/Main.java
@@ -0,0 +1,21 @@
+package ru.otus.spring03;
+
+import org.springframework.context.annotation.*;
+import ru.otus.spring03.domain.Person;
+import ru.otus.spring03.service.PersonService;
+
+@EnableAspectJAutoProxy
+@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/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDao.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDao.java
new file mode 100644
index 00000000..2a7e1903
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDao.java
@@ -0,0 +1,8 @@
+package ru.otus.spring03.dao;
+
+import ru.otus.spring03.domain.Person;
+
+public interface PersonDao {
+
+ Person findByName(String name);
+}
diff --git a/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java
new file mode 100644
index 00000000..64740885
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/dao/PersonDaoSimple.java
@@ -0,0 +1,12 @@
+package ru.otus.spring03.dao;
+
+import org.springframework.stereotype.Repository;
+import ru.otus.spring03.domain.Person;
+
+@Repository
+public class PersonDaoSimple implements PersonDao {
+
+ public Person findByName(String name) {
+ return new Person(name, 18);
+ }
+}
diff --git a/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/domain/Person.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/domain/Person.java
new file mode 100644
index 00000000..22fd88d6
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/domain/Person.java
@@ -0,0 +1,20 @@
+package ru.otus.spring03.domain;
+
+public class Person {
+
+ private String name;
+ private 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/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/logging/LoggingAspect.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/logging/LoggingAspect.java
new file mode 100644
index 00000000..6f9d1f43
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/logging/LoggingAspect.java
@@ -0,0 +1,16 @@
+package ru.otus.spring03.logging;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class LoggingAspect {
+
+ @Before("execution(* ru.otus.spring03.dao.PersonDaoSimple.*(..))")
+ public void logBefore(JoinPoint joinPoint) {
+ System.out.println("Вызов метода : " + joinPoint.getSignature().getName());
+ }
+}
diff --git a/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonService.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonService.java
new file mode 100644
index 00000000..815f7c0a
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonService.java
@@ -0,0 +1,8 @@
+package ru.otus.spring03.service;
+
+import ru.otus.spring03.domain.Person;
+
+public interface PersonService {
+
+ Person getByName(String name);
+}
diff --git a/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java
new file mode 100644
index 00000000..1c9ba93b
--- /dev/null
+++ b/2019-08/spring-03/spring-03-solution/src/main/java/ru/otus/spring03/service/PersonServiceImpl.java
@@ -0,0 +1,19 @@
+package ru.otus.spring03.service;
+
+import org.springframework.stereotype.Service;
+import ru.otus.spring03.dao.PersonDao;
+import ru.otus.spring03.domain.Person;
+
+@Service
+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);
+ }
+}