From 580a3bb9205f554961603ff505d7dda1562e5d3f Mon Sep 17 00:00:00 2001 From: Nguyen Nam Thai Date: Tue, 23 Jun 2020 17:58:44 +0700 Subject: [PATCH] BAEL-4068 Add AspectJ DI to module spring-di-2 --- spring-di-2/pom.xml | 65 +++++++++++++++++++ .../baeldung/di/aspectj/AspectJConfig.java | 9 +++ .../com/baeldung/di/aspectj/IdService.java | 12 ++++ .../com/baeldung/di/aspectj/PersonEntity.java | 36 ++++++++++ .../com/baeldung/di/aspectj/PersonObject.java | 29 +++++++++ .../baeldung/di/aspectj/PersonUnitTest.java | 24 +++++++ 6 files changed, 175 insertions(+) create mode 100644 spring-di-2/pom.xml create mode 100644 spring-di-2/src/main/java/com/baeldung/di/aspectj/AspectJConfig.java create mode 100644 spring-di-2/src/main/java/com/baeldung/di/aspectj/IdService.java create mode 100644 spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonEntity.java create mode 100644 spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonObject.java create mode 100644 spring-di-2/src/test/java/com/baeldung/di/aspectj/PersonUnitTest.java diff --git a/spring-di-2/pom.xml b/spring-di-2/pom.xml new file mode 100644 index 0000000000..9b703d55d9 --- /dev/null +++ b/spring-di-2/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + spring-di-2 + 1.0-SNAPSHOT + spring-di-2 + + + com.baeldung + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 + + + + + org.springframework + spring-test + ${spring.version} + + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + + + org.springframework + spring-aspects + ${spring.version} + + + + + + + org.codehaus.mojo + aspectj-maven-plugin + ${aspectj-plugin.version} + + ${java.version} + + + org.springframework + spring-aspects + + + + + + + compile + + + + + + + + + 2.3.1.RELEASE + 1.11 + + \ No newline at end of file diff --git a/spring-di-2/src/main/java/com/baeldung/di/aspectj/AspectJConfig.java b/spring-di-2/src/main/java/com/baeldung/di/aspectj/AspectJConfig.java new file mode 100644 index 0000000000..41d43483ac --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/di/aspectj/AspectJConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.di.aspectj; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.aspectj.EnableSpringConfigured; + +@ComponentScan +@EnableSpringConfigured +public class AspectJConfig { +} diff --git a/spring-di-2/src/main/java/com/baeldung/di/aspectj/IdService.java b/spring-di-2/src/main/java/com/baeldung/di/aspectj/IdService.java new file mode 100644 index 0000000000..4589f28309 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/di/aspectj/IdService.java @@ -0,0 +1,12 @@ +package com.baeldung.di.aspectj; + +import org.springframework.stereotype.Service; + +@Service +public class IdService { + private static int count; + + int generateId() { + return ++count; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonEntity.java b/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonEntity.java new file mode 100644 index 0000000000..f087a97c7e --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonEntity.java @@ -0,0 +1,36 @@ +package com.baeldung.di.aspectj; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Transient; + +@Entity +@Configurable(preConstruction = true) +public class PersonEntity { + @Autowired + @Transient + private IdService idService; + + @Id + private int id; + private String name; + + public PersonEntity() { + } + + public PersonEntity(String name) { + id = idService.generateId(); + this.name = name; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonObject.java b/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonObject.java new file mode 100644 index 0000000000..e63e43ce3d --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/di/aspectj/PersonObject.java @@ -0,0 +1,29 @@ +package com.baeldung.di.aspectj; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; + +@Configurable +public class PersonObject { + @Autowired + private IdService idService; + + private int id; + private String name; + + public PersonObject(String name) { + this.name = name; + } + + void generateId() { + this.id = idService.generateId(); + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/spring-di-2/src/test/java/com/baeldung/di/aspectj/PersonUnitTest.java b/spring-di-2/src/test/java/com/baeldung/di/aspectj/PersonUnitTest.java new file mode 100644 index 0000000000..72ccfbadf3 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/di/aspectj/PersonUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.di.aspectj; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.junit.Assert.assertEquals; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = AspectJConfig.class) +public class PersonUnitTest { + @Test + public void givenUnmanagedObjects_whenInjectingIdService_thenIdValueIsCorrectlySet() { + PersonObject personObject = new PersonObject("Baeldung"); + personObject.generateId(); + assertEquals(1, personObject.getId()); + assertEquals("Baeldung", personObject.getName()); + + PersonEntity personEntity = new PersonEntity("Baeldung"); + assertEquals(2, personEntity.getId()); + assertEquals("Baeldung", personEntity.getName()); + } +} \ No newline at end of file