From d71dda57eada7163c223bda1b48e3a42e17a237e Mon Sep 17 00:00:00 2001 From: stvort Date: Fri, 11 Mar 2022 15:58:31 +0400 Subject: [PATCH] 2022-02 spring-04-aop added --- .../spring-04-aop/aop-classwork/.gitignore | 24 ++++ .../aop-classwork/exercise/pom.xml | 42 +++++++ .../src/main/java/ru/otus/spring/Main.java | 20 ++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 12 ++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/logging/LoggingAspect.java | 13 +++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 19 ++++ 2022-02/spring-04-aop/aop-classwork/pom.xml | 17 +++ .../aop-classwork/solution/pom.xml | 42 +++++++ .../src/main/java/ru/otus/spring/Main.java | 21 ++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 12 ++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/logging/LoggingAspect.java | 19 ++++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 19 ++++ 2022-02/spring-04-aop/aop-demo/.gitignore | 24 ++++ .../aop-demo/aop-ctw-plain/exec.sh | 3 + .../aop-demo/aop-ctw-plain/pom.xml | 93 ++++++++++++++++ .../src/main/java/ru/otus/spring/Main.java | 25 +++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 10 ++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/logging/LoggingAspect.java | 17 +++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 17 +++ .../spring-04-aop/aop-demo/aop-ctw/exec.sh | 3 + .../spring-04-aop/aop-demo/aop-ctw/pom.xml | 105 ++++++++++++++++++ .../src/main/java/ru/otus/spring/Main.java | 29 +++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 12 ++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/logging/LoggingAspect.java | 18 +++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 19 ++++ .../spring-04-aop/aop-demo/aop-ltw/exec.sh | 3 + .../spring-04-aop/aop-demo/aop-ltw/pom.xml | 80 +++++++++++++ .../src/main/java/ru/otus/spring/Main.java | 31 ++++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 15 +++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/logging/LoggingAspect.java | 18 +++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 19 ++++ .../src/main/resources/META-INF/aop.xml | 13 +++ .../spring-04-aop/aop-demo/aop-native/pom.xml | 42 +++++++ .../src/main/java/ru/otus/spring/Main.java | 20 ++++ .../spring/config/CommonNativeAopConfig.java | 14 +++ .../spring/config/LoggingAspectConfig.java | 40 +++++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++ .../ru/otus/spring/dao/PersonDaoSimple.java | 12 ++ .../java/ru/otus/spring/domain/Person.java | 20 ++++ .../ru/otus/spring/service/PersonService.java | 8 ++ .../spring/service/PersonServiceImpl.java | 19 ++++ 2022-02/spring-04-aop/aop-demo/pom.xml | 19 ++++ 57 files changed, 1196 insertions(+) create mode 100644 2022-02/spring-04-aop/aop-classwork/.gitignore create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/pom.xml create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/logging/LoggingAspect.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-classwork/pom.xml create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/pom.xml create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/logging/LoggingAspect.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-demo/.gitignore create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/exec.sh create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/pom.xml create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/logging/LoggingAspect.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/exec.sh create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/pom.xml create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/logging/LoggingAspect.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/exec.sh create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/pom.xml create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/logging/LoggingAspect.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/resources/META-INF/aop.xml create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/pom.xml create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/Main.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/CommonNativeAopConfig.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/LoggingAspectConfig.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2022-02/spring-04-aop/aop-demo/pom.xml diff --git a/2022-02/spring-04-aop/aop-classwork/.gitignore b/2022-02/spring-04-aop/aop-classwork/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/.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/2022-02/spring-04-aop/aop-classwork/exercise/pom.xml b/2022-02/spring-04-aop/aop-classwork/exercise/pom.xml new file mode 100644 index 00000000..0e09c7f1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + ru.otus + exercise + 1.0 + + + 11 + 11 + UTF-8 + 5.3.16 + 1.9.8 + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework + spring-aop + ${spring.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + diff --git a/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..1e9380b4 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,20 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.*; +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/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/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/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..f8e0bb29 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,12 @@ +package ru.otus.spring.dao; + +import org.springframework.stereotype.Repository; +import ru.otus.spring.domain.Person; + +@Repository +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/logging/LoggingAspect.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/logging/LoggingAspect.java new file mode 100644 index 00000000..4f12dc0c --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/logging/LoggingAspect.java @@ -0,0 +1,13 @@ +package ru.otus.spring.logging; + +import org.aspectj.lang.JoinPoint; + +public class LoggingAspect { + + public void logBefore(JoinPoint joinPoint) { + System.out.println("Прокси : " + joinPoint.getThis().getClass().getName()); + System.out.println("Класс : " + joinPoint.getTarget().getClass().getName()); + + System.out.println("Вызов метода : " + joinPoint.getSignature().getName()); + } +} diff --git a/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/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/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..88b311a5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,19 @@ +package ru.otus.spring.service; + +import org.springframework.stereotype.Service; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-classwork/pom.xml b/2022-02/spring-04-aop/aop-classwork/pom.xml new file mode 100644 index 00000000..2f9b1745 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ru.otus + aop-classwork + 1.0 + + pom + + + exercise + solution + + diff --git a/2022-02/spring-04-aop/aop-classwork/solution/pom.xml b/2022-02/spring-04-aop/aop-classwork/solution/pom.xml new file mode 100644 index 00000000..b0c036e0 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + ru.otus + solution + 1.0 + + + 11 + 11 + UTF-8 + 5.3.16 + 1.9.8 + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework + spring-aop + ${spring.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + diff --git a/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..f4db40b0 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,21 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.*; +import ru.otus.spring.domain.Person; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/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/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..f8e0bb29 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,12 @@ +package ru.otus.spring.dao; + +import org.springframework.stereotype.Repository; +import ru.otus.spring.domain.Person; + +@Repository +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/logging/LoggingAspect.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/logging/LoggingAspect.java new file mode 100644 index 00000000..a5622c3d --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/logging/LoggingAspect.java @@ -0,0 +1,19 @@ +package ru.otus.spring.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.spring.dao.PersonDaoSimple.*(..))") + public void logBefore(JoinPoint joinPoint) { + System.out.println("Прокси : " + joinPoint.getThis().getClass().getName()); + System.out.println("Класс : " + joinPoint.getTarget().getClass().getName()); + + System.out.println("Вызов метода : " + joinPoint.getSignature().getName()); + } +} diff --git a/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/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/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..88b311a5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-classwork/solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,19 @@ +package ru.otus.spring.service; + +import org.springframework.stereotype.Service; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/.gitignore b/2022-02/spring-04-aop/aop-demo/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/.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/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/exec.sh b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/exec.sh new file mode 100644 index 00000000..4af59274 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/exec.sh @@ -0,0 +1,3 @@ +mvn clean package +java -jar target/aop-ctw-plain-1.0-jar-with-dependencies.jar +read -p "Press enter to continue" \ No newline at end of file diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/pom.xml b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/pom.xml new file mode 100644 index 00000000..63d68b8b --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/pom.xml @@ -0,0 +1,93 @@ + + + 4.0.0 + + ru.otus + aop-ctw-plain + 1.0 + + + 11 + 11 + UTF-8 + 1.9.8 + 1.12.6 + + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + + com.nickwongdev + aspectj-maven-plugin + ${aspectj.plugin.version} + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + ru.otus.spring.Main + + + + + + make-assembly + package + + single + + + + + + com.nickwongdev + aspectj-maven-plugin + ${aspectj.plugin.version} + + 11 + ${maven.compiler.source} + ${maven.compiler.target} + true + true + ignore + UTF-8 + + ${project.build.directory}/classes + + true + + + + + compile + + + + + + + + + diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..307dea7f --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,25 @@ +package ru.otus.spring; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.dao.PersonDaoSimple; +import ru.otus.spring.domain.Person; +import ru.otus.spring.service.PersonService; +import ru.otus.spring.service.PersonServiceImpl; + +/* +Запуск примера: + 1. cd aop-demo/aop-ctw-plain/ + 2. mvn clean package + 3. java -jar target/aop-ctw-plain-1.0-jar-with-dependencies.jar + */ + +public class Main { + + public static void main(String[] args) { + PersonDao personDao = new PersonDaoSimple(); + PersonService service = new PersonServiceImpl(personDao); + + Person ivan = service.getByName("Ivan"); + System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/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/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..7f7c97c6 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/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/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/logging/LoggingAspect.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/logging/LoggingAspect.java new file mode 100644 index 00000000..e77adb73 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/logging/LoggingAspect.java @@ -0,0 +1,17 @@ +package ru.otus.spring.logging; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; + +@Aspect +public class LoggingAspect { + + @Before("execution(* ru.otus.spring.dao.PersonDaoSimple.*(..))") + public void logBefore(JoinPoint joinPoint) { + System.out.println("Прокси : " + joinPoint.getThis().getClass().getName()); + System.out.println("Класс : " + joinPoint.getTarget().getClass().getName()); + + System.out.println("Вызов метода : " + joinPoint.getSignature().getName()); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/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/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..794c29dd --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw-plain/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/2022-02/spring-04-aop/aop-demo/aop-ctw/exec.sh b/2022-02/spring-04-aop/aop-demo/aop-ctw/exec.sh new file mode 100644 index 00000000..347ebc16 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/exec.sh @@ -0,0 +1,3 @@ +mvn clean package +java -jar target/aop-ctw-1.0-jar-with-dependencies.jar +read -p "Press enter to continue" \ No newline at end of file diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw/pom.xml b/2022-02/spring-04-aop/aop-demo/aop-ctw/pom.xml new file mode 100644 index 00000000..6658bda5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + ru.otus + aop-ctw + 1.0 + + + 11 + 11 + UTF-8 + 5.3.16 + 1.9.8 + 1.12.6 + + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework + spring-aop + ${spring.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + + com.nickwongdev + aspectj-maven-plugin + ${aspectj.plugin.version} + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + ru.otus.spring.Main + + + + + + make-assembly + package + + single + + + + + + com.nickwongdev + aspectj-maven-plugin + ${aspectj.plugin.version} + + 11 + ${maven.compiler.source} + ${maven.compiler.target} + true + true + ignore + UTF-8 + + ${project.build.directory}/classes + + true + + + + + compile + + + + + + + + + diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..00c45d28 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,29 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.*; +import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver; +import org.springframework.instrument.classloading.LoadTimeWeaver; +import ru.otus.spring.domain.Person; +import ru.otus.spring.service.PersonService; + +/* +Запуск примера: + 1. cd aop-demo/aop-ctw/ + 2. mvn clean package + 3. java -jar target/aop-ctw-1.0-jar-with-dependencies.jar + */ + +@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/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/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/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..f8e0bb29 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,12 @@ +package ru.otus.spring.dao; + +import org.springframework.stereotype.Repository; +import ru.otus.spring.domain.Person; + +@Repository +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/logging/LoggingAspect.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/logging/LoggingAspect.java new file mode 100644 index 00000000..17a56801 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/logging/LoggingAspect.java @@ -0,0 +1,18 @@ +package ru.otus.spring.logging; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +@Aspect +public class LoggingAspect { + + @Before("execution(* ru.otus.spring.dao.PersonDaoSimple.*(..))") + public void logBefore(JoinPoint joinPoint) { + System.out.println("Прокси : " + joinPoint.getThis().getClass().getName()); + System.out.println("Класс : " + joinPoint.getTarget().getClass().getName()); + + System.out.println("Вызов метода : " + joinPoint.getSignature().getName()); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/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/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..88b311a5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ctw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,19 @@ +package ru.otus.spring.service; + +import org.springframework.stereotype.Service; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-ltw/exec.sh b/2022-02/spring-04-aop/aop-demo/aop-ltw/exec.sh new file mode 100644 index 00000000..fd3ad6e9 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/exec.sh @@ -0,0 +1,3 @@ +mvn clean package +java -javaagent:c:/Users/User/.m2/repository/org/aspectj/aspectjweaver/1.9.8/aspectjweaver-1.9.8.jar -jar target/aop-ltw-1.0-jar-with-dependencies.jar +read -p "Press enter to continue" \ No newline at end of file diff --git a/2022-02/spring-04-aop/aop-demo/aop-ltw/pom.xml b/2022-02/spring-04-aop/aop-demo/aop-ltw/pom.xml new file mode 100644 index 00000000..36f79c44 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/pom.xml @@ -0,0 +1,80 @@ + + + 4.0.0 + + ru.otus + aop-ltw + 1.0 + + + 11 + 11 + UTF-8 + 5.3.16 + 1.9.8 + + + + + org.springframework + spring-context + ${spring.version} + + + + + org.springframework + spring-aop + ${spring.version} + + + + org.springframework + spring-instrument + ${spring.version} + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + ru.otus.spring.Main + + + + + + make-assembly + package + + single + + + + + + + diff --git a/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..dee19086 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,31 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.*; +import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver; +import org.springframework.instrument.classloading.LoadTimeWeaver; +import ru.otus.spring.domain.Person; +import ru.otus.spring.service.PersonService; + +/* +Запуск примера: + 1. В IDEA, вменю запуска выбираем "Edit Configurations..." + 2. В поле "VM options" вносим "-javaagent:${путь.до.m2}\.m2\repository\org\aspectj\aspectjweaver\1.9.8\aspectjweaver-1.9.8.jar", + где ${путь.до.m2} это путь до репозитория мавен на текущем компьютере. + Пример: "-javaagent:c:\Users\MyUserName\.m2\repository\org\aspectj\aspectjweaver\1.9.8\aspectjweaver-1.9.8.jar". + Кавычки не вносим) + 3. Запускаем Main +*/ + +@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/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/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/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..6338ee1a --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,15 @@ +package ru.otus.spring.dao; + +import org.springframework.stereotype.Repository; +import ru.otus.spring.domain.Person; + +@Repository +public class PersonDaoSimple implements PersonDao { + public PersonDaoSimple() { + System.out.println(this.getClass().getClassLoader()); + } + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/logging/LoggingAspect.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/logging/LoggingAspect.java new file mode 100644 index 00000000..17a56801 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/logging/LoggingAspect.java @@ -0,0 +1,18 @@ +package ru.otus.spring.logging; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +@Aspect +public class LoggingAspect { + + @Before("execution(* ru.otus.spring.dao.PersonDaoSimple.*(..))") + public void logBefore(JoinPoint joinPoint) { + System.out.println("Прокси : " + joinPoint.getThis().getClass().getName()); + System.out.println("Класс : " + joinPoint.getTarget().getClass().getName()); + + System.out.println("Вызов метода : " + joinPoint.getSignature().getName()); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/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/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..88b311a5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,19 @@ +package ru.otus.spring.service; + +import org.springframework.stereotype.Service; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/resources/META-INF/aop.xml b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/resources/META-INF/aop.xml new file mode 100644 index 00000000..adf0ac99 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-ltw/src/main/resources/META-INF/aop.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/2022-02/spring-04-aop/aop-demo/aop-native/pom.xml b/2022-02/spring-04-aop/aop-demo/aop-native/pom.xml new file mode 100644 index 00000000..ed357c5d --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + ru.otus + aop-native + 1.0 + + + 11 + 11 + UTF-8 + 5.3.16 + 1.9.8 + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework + spring-aop + ${spring.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + diff --git a/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..1e9380b4 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,20 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.*; +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/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/CommonNativeAopConfig.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/CommonNativeAopConfig.java new file mode 100644 index 00000000..de391660 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/CommonNativeAopConfig.java @@ -0,0 +1,14 @@ +package ru.otus.spring.config; + +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; + +@Configuration +public class CommonNativeAopConfig { + @Bean + public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){ + return new DefaultAdvisorAutoProxyCreator(); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/LoggingAspectConfig.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/LoggingAspectConfig.java new file mode 100644 index 00000000..0fc1f437 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/config/LoggingAspectConfig.java @@ -0,0 +1,40 @@ +package ru.otus.spring.config; + +import org.springframework.aop.ClassFilter; +import org.springframework.aop.MethodBeforeAdvice; +import org.springframework.aop.MethodMatcher; +import org.springframework.aop.Pointcut; +import org.springframework.aop.support.DefaultPointcutAdvisor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import ru.otus.spring.dao.PersonDaoSimple; + +@Configuration +public class LoggingAspectConfig { + + public Pointcut personDaoSimpleLoggingAspectPointcut() { + return new Pointcut() { + @Override + public ClassFilter getClassFilter() { + return clazz -> clazz.equals(PersonDaoSimple.class); + } + + @Override + public MethodMatcher getMethodMatcher() { + return MethodMatcher.TRUE; + } + }; + } + + MethodBeforeAdvice personDaoSimpleLoggingAspectBeforeAdvice() { + return (method, objects, o) -> System.out.println("Ура! Вызов метода : " + method.getName()); + } + + + @Bean + public DefaultPointcutAdvisor personDaoSimpleLoggingAspectAdvisor() { + return new DefaultPointcutAdvisor(personDaoSimpleLoggingAspectPointcut(), + personDaoSimpleLoggingAspectBeforeAdvice()); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDao.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/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/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..f8e0bb29 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,12 @@ +package ru.otus.spring.dao; + +import org.springframework.stereotype.Repository; +import ru.otus.spring.domain.Person; + +@Repository +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..b19b42c1 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonService.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/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/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..88b311a5 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/aop-native/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,19 @@ +package ru.otus.spring.service; + +import org.springframework.stereotype.Service; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.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/2022-02/spring-04-aop/aop-demo/pom.xml b/2022-02/spring-04-aop/aop-demo/pom.xml new file mode 100644 index 00000000..2da9b147 --- /dev/null +++ b/2022-02/spring-04-aop/aop-demo/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + ru.otus + aop-demo + 1.0 + + pom + + + aop-ctw + aop-ctw-plain + aop-ltw + aop-native + +