From 80f4f5a7d0488e67d9b7635db96c4aad85510f0d Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 4 Aug 2023 05:54:26 -0400 Subject: [PATCH] Add Example Code (#14521) --- di-modules/avaje/README.md | 7 ++++ di-modules/avaje/pom.xml | 37 +++++++++++++++++++ .../com/baeldung/avaje/intro/ArmsFactory.java | 18 +++++++++ .../java/com/baeldung/avaje/intro/Knight.java | 34 +++++++++++++++++ .../java/com/baeldung/avaje/intro/Ninja.java | 30 +++++++++++++++ .../java/com/baeldung/avaje/intro/Shield.java | 18 +++++++++ .../java/com/baeldung/avaje/intro/Sword.java | 8 ++++ .../baeldung/avaje/intro/AvajeUnitTest.java | 21 +++++++++++ .../avaje/intro/ExampleInjectTest.java | 29 +++++++++++++++ 9 files changed, 202 insertions(+) create mode 100644 di-modules/avaje/README.md create mode 100644 di-modules/avaje/pom.xml create mode 100644 di-modules/avaje/src/main/java/com/baeldung/avaje/intro/ArmsFactory.java create mode 100644 di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Knight.java create mode 100644 di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Ninja.java create mode 100644 di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Shield.java create mode 100644 di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Sword.java create mode 100644 di-modules/avaje/src/test/java/com/baeldung/avaje/intro/AvajeUnitTest.java create mode 100644 di-modules/avaje/src/test/java/com/baeldung/avaje/intro/ExampleInjectTest.java diff --git a/di-modules/avaje/README.md b/di-modules/avaje/README.md new file mode 100644 index 0000000000..ea914e551f --- /dev/null +++ b/di-modules/avaje/README.md @@ -0,0 +1,7 @@ +# Introduction to Avaje Inject + +This module contains articles about Avaje + +### Relevant articles: + +- [Introduction to Avaje Inject](https://www.baeldung.com/avaje-inject/intro) \ No newline at end of file diff --git a/di-modules/avaje/pom.xml b/di-modules/avaje/pom.xml new file mode 100644 index 0000000000..7ffe14bd72 --- /dev/null +++ b/di-modules/avaje/pom.xml @@ -0,0 +1,37 @@ + + 4.0.0 + com.baeldung + inject-intro + 0.0.1-SNAPSHOT + avaje-inject-intro + + 11 + 11 + 9.5 + + + + io.avaje + avaje-inject + ${avaje.inject.version} + + + + io.avaje + avaje-inject-test + ${avaje.inject.version} + test + + + + + io.avaje + avaje-inject-generator + ${avaje.inject.version} + provided + true + + + \ No newline at end of file diff --git a/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/ArmsFactory.java b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/ArmsFactory.java new file mode 100644 index 0000000000..381b390ad0 --- /dev/null +++ b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/ArmsFactory.java @@ -0,0 +1,18 @@ +package com.baeldung.avaje.intro; + +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; + +@Factory +public class ArmsFactory { + + @Bean + public Sword provideSword() { + return new Sword(); + } + + @Bean + public Shield provideShield() { + return new Shield(25); + } +} diff --git a/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Knight.java b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Knight.java new file mode 100644 index 0000000000..c78c60b858 --- /dev/null +++ b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Knight.java @@ -0,0 +1,34 @@ +package com.baeldung.avaje.intro; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; + +@Singleton +public class Knight { + + private Sword sword; + + private Shield shield; + + @Inject + public Knight(Sword sword, Shield shield) { + this.sword = sword; + this.shield = shield; + } + + public Sword sword() { + return sword; + } + + public void sword(Sword engine) { + this.sword = engine; + } + + public Shield shield() { + return shield; + } + + public void shield(Shield brand) { + this.shield = brand; + } +} diff --git a/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Ninja.java b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Ninja.java new file mode 100644 index 0000000000..e4d893ffef --- /dev/null +++ b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Ninja.java @@ -0,0 +1,30 @@ +package com.baeldung.avaje.intro; + +import io.avaje.inject.BeanScope; +import io.avaje.inject.PostConstruct; +import io.avaje.inject.PreDestroy; +import jakarta.inject.Singleton; + +@Singleton +public class Ninja { + + private Sword sword; + + @PostConstruct + void equip(BeanScope scope) { + sword = scope.get(Sword.class); + } + + @PreDestroy + void dequip() { + sword = null; + } + + public Sword sword() { + return sword; + } + + public void sword(Sword engine) { + this.sword = engine; + } +} diff --git a/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Shield.java b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Shield.java new file mode 100644 index 0000000000..c5d5a3e999 --- /dev/null +++ b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Shield.java @@ -0,0 +1,18 @@ +package com.baeldung.avaje.intro; + +public class Shield { + + private int defense; + + public Shield(int defense) { + this.defense = defense; + } + + public int defense() { + return defense; + } + + public void defense(int defense) { + this.defense = defense; + } +} diff --git a/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Sword.java b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Sword.java new file mode 100644 index 0000000000..6eceed082e --- /dev/null +++ b/di-modules/avaje/src/main/java/com/baeldung/avaje/intro/Sword.java @@ -0,0 +1,8 @@ +package com.baeldung.avaje.intro; + +public class Sword { + + public void attack() { + System.out.println("swing"); + } +} diff --git a/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/AvajeUnitTest.java b/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/AvajeUnitTest.java new file mode 100644 index 0000000000..a0b71a228a --- /dev/null +++ b/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/AvajeUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.avaje.intro; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import io.avaje.inject.BeanScope; + +class AvajeUnitTest { + + @Test + void givenBeanScope_whenScopeGetsKnight_thenKnightShouldHaveDependencies() { + + final var scope = BeanScope.builder().build(); + final var knight = scope.get(Knight.class); + + assertNotNull(knight); + assertNotNull(knight.sword()); + assertNotNull(knight.shield()); + assertEquals(25, knight.shield().defense()); + } +} diff --git a/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/ExampleInjectTest.java b/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/ExampleInjectTest.java new file mode 100644 index 0000000000..6eada4cb6d --- /dev/null +++ b/di-modules/avaje/src/test/java/com/baeldung/avaje/intro/ExampleInjectTest.java @@ -0,0 +1,29 @@ +package com.baeldung.avaje.intro; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.Mockito; + +import io.avaje.inject.test.InjectTest; +import jakarta.inject.Inject; + +@InjectTest +class ExampleInjectTest { + + @Mock Shield shield; + + @Inject Knight knight; + + @Test + void givenMockedShield_whenGetShield_thenShieldShouldHaveMockedValue() { + + Mockito.when(shield.defense()).thenReturn(0); + assertNotNull(knight); + assertNotNull(knight.sword()); + assertNotNull(knight.shield()); + assertEquals(0, knight.shield().defense()); + } +}