diff --git a/core/pom.xml b/core/pom.xml deleted file mode 100644 index ab3dff6..0000000 --- a/core/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - parent - xyz.juliandev - 1.0.0 - - 4.0.0 - - easyinjector-core - - EasyInjectorCore - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5182427..1d0477b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,15 +5,8 @@ 4.0.0 xyz.juliandev - parent - pom - 1.0.0 - - - core - - - EasyInjector + EasyInject + 2.0.0 EasyInjector is an ultra-lightweight dependency injection library for Java. @@ -22,7 +15,7 @@ The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt + https://www.apache.org/licenses/LICENSE-2.0.txt repo @@ -67,7 +60,7 @@ org.projectlombok lombok - 1.18.26 + 1.18.28 @@ -77,7 +70,7 @@ maven-jar-plugin 3.2.0 - ${project.parent.basedir}/artifacts/ + ${project.basedir}/artifacts/ @@ -112,4 +105,5 @@ + \ No newline at end of file diff --git a/core/src/main/java/xyz/juliandev/easy/Easy.java b/src/main/java/xyz/juliandev/easy/Easy.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/Easy.java rename to src/main/java/xyz/juliandev/easy/Easy.java diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Inject.java b/src/main/java/xyz/juliandev/easy/annotations/Inject.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/annotations/Inject.java rename to src/main/java/xyz/juliandev/easy/annotations/Inject.java diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Named.java b/src/main/java/xyz/juliandev/easy/annotations/Named.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/annotations/Named.java rename to src/main/java/xyz/juliandev/easy/annotations/Named.java diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Provides.java b/src/main/java/xyz/juliandev/easy/annotations/Provides.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/annotations/Provides.java rename to src/main/java/xyz/juliandev/easy/annotations/Provides.java diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Qualifier.java b/src/main/java/xyz/juliandev/easy/annotations/Qualifier.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/annotations/Qualifier.java rename to src/main/java/xyz/juliandev/easy/annotations/Qualifier.java diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Scope.java b/src/main/java/xyz/juliandev/easy/annotations/Scope.java similarity index 99% rename from core/src/main/java/xyz/juliandev/easy/annotations/Scope.java rename to src/main/java/xyz/juliandev/easy/annotations/Scope.java index 17e0ef6..dd2f9b6 100644 --- a/core/src/main/java/xyz/juliandev/easy/annotations/Scope.java +++ b/src/main/java/xyz/juliandev/easy/annotations/Scope.java @@ -1,10 +1,11 @@ package xyz.juliandev.easy.annotations; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; import java.lang.annotation.Documented; -import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; @Target(ANNOTATION_TYPE) @Retention(RUNTIME) diff --git a/core/src/main/java/xyz/juliandev/easy/annotations/Singleton.java b/src/main/java/xyz/juliandev/easy/annotations/Singleton.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/annotations/Singleton.java rename to src/main/java/xyz/juliandev/easy/annotations/Singleton.java diff --git a/core/src/main/java/xyz/juliandev/easy/injector/EasyInjector.java b/src/main/java/xyz/juliandev/easy/injector/EasyInjector.java similarity index 83% rename from core/src/main/java/xyz/juliandev/easy/injector/EasyInjector.java rename to src/main/java/xyz/juliandev/easy/injector/EasyInjector.java index 77ef071..32b57ea 100644 --- a/core/src/main/java/xyz/juliandev/easy/injector/EasyInjector.java +++ b/src/main/java/xyz/juliandev/easy/injector/EasyInjector.java @@ -1,5 +1,7 @@ package xyz.juliandev.easy.injector; +import xyz.juliandev.easy.module.AbstractModule; + public interface EasyInjector { /** @@ -24,4 +26,6 @@ public interface EasyInjector { boolean injectObjectFields(Object target); + void addDynamicModule(AbstractModule abstractModule); + } diff --git a/core/src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java b/src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java similarity index 97% rename from core/src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java rename to src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java index f4c7a2b..6c074bf 100644 --- a/core/src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java +++ b/src/main/java/xyz/juliandev/easy/injector/EasyInjectorImpl.java @@ -1,11 +1,10 @@ package xyz.juliandev.easy.injector; import xyz.juliandev.easy.annotations.Inject; +import xyz.juliandev.easy.annotations.Provides; import xyz.juliandev.easy.annotations.Qualifier; import xyz.juliandev.easy.annotations.Singleton; import xyz.juliandev.easy.module.AbstractModule; -import xyz.juliandev.easy.annotations.Provides; - import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -59,6 +58,16 @@ public Provider getProvider(Key key) { return provider(key, null); } + /** + * Dynamic Registers AbstractModules + */ + @Override + public void addDynamicModule(AbstractModule abstractModule) { + for (Method providerMethod : providers(abstractModule.getClass())) { + providerMethod(abstractModule, providerMethod); + } + } + /** * Injects fields to the target object */ @@ -273,4 +282,4 @@ private boolean providerInSubClass(Method method, Set discoveredMethods) return false; } -} +} \ No newline at end of file diff --git a/core/src/main/java/xyz/juliandev/easy/injector/EasyInjectorRuntimeException.java b/src/main/java/xyz/juliandev/easy/injector/EasyInjectorRuntimeException.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/injector/EasyInjectorRuntimeException.java rename to src/main/java/xyz/juliandev/easy/injector/EasyInjectorRuntimeException.java diff --git a/core/src/main/java/xyz/juliandev/easy/injector/Key.java b/src/main/java/xyz/juliandev/easy/injector/Key.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/injector/Key.java rename to src/main/java/xyz/juliandev/easy/injector/Key.java diff --git a/core/src/main/java/xyz/juliandev/easy/injector/Provider.java b/src/main/java/xyz/juliandev/easy/injector/Provider.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/injector/Provider.java rename to src/main/java/xyz/juliandev/easy/injector/Provider.java diff --git a/core/src/main/java/xyz/juliandev/easy/module/AbstractModule.java b/src/main/java/xyz/juliandev/easy/module/AbstractModule.java similarity index 100% rename from core/src/main/java/xyz/juliandev/easy/module/AbstractModule.java rename to src/main/java/xyz/juliandev/easy/module/AbstractModule.java diff --git a/core/src/test/java/xyz/juliandev/easy/AmbiguousModuleTest.java b/src/test/java/xyz/juliandev/easy/AmbiguousModuleTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/AmbiguousModuleTest.java rename to src/test/java/xyz/juliandev/easy/AmbiguousModuleTest.java diff --git a/src/test/java/xyz/juliandev/easy/DynamicModuleTest.java b/src/test/java/xyz/juliandev/easy/DynamicModuleTest.java new file mode 100644 index 0000000..96966e8 --- /dev/null +++ b/src/test/java/xyz/juliandev/easy/DynamicModuleTest.java @@ -0,0 +1,45 @@ +package xyz.juliandev.easy; + +import org.junit.Test; +import xyz.juliandev.easy.annotations.Inject; +import xyz.juliandev.easy.annotations.Named; +import xyz.juliandev.easy.annotations.Provides; +import xyz.juliandev.easy.injector.EasyInjector; +import xyz.juliandev.easy.module.AbstractModule; + +public class DynamicModuleTest { + + @Test + public void dynamicModule() { + EasyInjector injector = Easy.createInjector(new AbstractModule() { + @Provides + @Named("foo") + String foo() { + return "foo"; + } + }); + injector.addDynamicModule(new AbstractModule() { + + @Provides + @Named("bar") + String bar() { + return "bar"; + } + }); + + TestObj obj = injector.getInstance(TestObj.class); + obj.print(); + + + } + + public record TestObj(@Named("foo") String foo, @Named("bar") String bar) { + @Inject + public TestObj {} + + public void print() { + System.out.println("fooVar: " + foo + " barVar: " + bar); + } + } + +} diff --git a/core/src/test/java/xyz/juliandev/easy/FieldInjectionTest.java b/src/test/java/xyz/juliandev/easy/FieldInjectionTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/FieldInjectionTest.java rename to src/test/java/xyz/juliandev/easy/FieldInjectionTest.java diff --git a/core/src/test/java/xyz/juliandev/easy/ModuleOverrideTest.java b/src/test/java/xyz/juliandev/easy/ModuleOverrideTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/ModuleOverrideTest.java rename to src/test/java/xyz/juliandev/easy/ModuleOverrideTest.java diff --git a/core/src/test/java/xyz/juliandev/easy/NamedDependencyTest.java b/src/test/java/xyz/juliandev/easy/NamedDependencyTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/NamedDependencyTest.java rename to src/test/java/xyz/juliandev/easy/NamedDependencyTest.java diff --git a/core/src/test/java/xyz/juliandev/easy/PolymorphicDependencyTest.java b/src/test/java/xyz/juliandev/easy/PolymorphicDependencyTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/PolymorphicDependencyTest.java rename to src/test/java/xyz/juliandev/easy/PolymorphicDependencyTest.java diff --git a/core/src/test/java/xyz/juliandev/easy/ProviderInjectionTest.java b/src/test/java/xyz/juliandev/easy/ProviderInjectionTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/ProviderInjectionTest.java rename to src/test/java/xyz/juliandev/easy/ProviderInjectionTest.java diff --git a/core/src/test/java/xyz/juliandev/easy/SingletonTest.java b/src/test/java/xyz/juliandev/easy/SingletonTest.java similarity index 100% rename from core/src/test/java/xyz/juliandev/easy/SingletonTest.java rename to src/test/java/xyz/juliandev/easy/SingletonTest.java index ebb606d..ae875fd 100644 --- a/core/src/test/java/xyz/juliandev/easy/SingletonTest.java +++ b/src/test/java/xyz/juliandev/easy/SingletonTest.java @@ -1,9 +1,9 @@ package xyz.juliandev.easy; +import org.junit.Test; import xyz.juliandev.easy.annotations.Singleton; import xyz.juliandev.easy.injector.EasyInjector; import xyz.juliandev.easy.injector.Provider; -import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals;