From ed4ad4721d3300eece333cb0f81a579a8aa6af7e Mon Sep 17 00:00:00 2001 From: JavaEEPRO Date: Thu, 28 Feb 2019 15:52:31 +0200 Subject: [PATCH 1/2] type injection: populated properties of itstantiated beans --- src/main/java/si/inspirited/Main.java | 1 - src/main/java/si/inspirited/ProductService.java | 2 +- src/main/java/si/inspirited/PromotionsService.java | 2 +- src/org/springframework/beans/factory/BeanFactory.java | 2 +- src/org/springframework/beans/factory/annotation/Autowired.java | 2 +- src/org/springframework/beans/factory/stereotype/Component.java | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/si/inspirited/Main.java b/src/main/java/si/inspirited/Main.java index 8f83e3c..dd6bea9 100644 --- a/src/main/java/si/inspirited/Main.java +++ b/src/main/java/si/inspirited/Main.java @@ -8,6 +8,5 @@ public static void main(String[] args) { BeanFactory beanFactory = new BeanFactory(); beanFactory.instantiate("main.java.si.inspirited"); beanFactory.populateProperties(); - } } diff --git a/src/main/java/si/inspirited/ProductService.java b/src/main/java/si/inspirited/ProductService.java index 347c573..130f206 100644 --- a/src/main/java/si/inspirited/ProductService.java +++ b/src/main/java/si/inspirited/ProductService.java @@ -16,4 +16,4 @@ public PromotionsService getPromotionsService() { public void setPromotionsService(PromotionsService promotionsService) { this.promotionsService = promotionsService; } -} +} \ No newline at end of file diff --git a/src/main/java/si/inspirited/PromotionsService.java b/src/main/java/si/inspirited/PromotionsService.java index a6f3944..dd2daae 100644 --- a/src/main/java/si/inspirited/PromotionsService.java +++ b/src/main/java/si/inspirited/PromotionsService.java @@ -5,4 +5,4 @@ @Component public class PromotionsService { -} +} \ No newline at end of file diff --git a/src/org/springframework/beans/factory/BeanFactory.java b/src/org/springframework/beans/factory/BeanFactory.java index a5d250e..61d6976 100644 --- a/src/org/springframework/beans/factory/BeanFactory.java +++ b/src/org/springframework/beans/factory/BeanFactory.java @@ -70,4 +70,4 @@ public void populateProperties(){ } } } -} +} \ No newline at end of file diff --git a/src/org/springframework/beans/factory/annotation/Autowired.java b/src/org/springframework/beans/factory/annotation/Autowired.java index 9cebf86..0623bcc 100644 --- a/src/org/springframework/beans/factory/annotation/Autowired.java +++ b/src/org/springframework/beans/factory/annotation/Autowired.java @@ -5,4 +5,4 @@ @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { -} +} \ No newline at end of file diff --git a/src/org/springframework/beans/factory/stereotype/Component.java b/src/org/springframework/beans/factory/stereotype/Component.java index db5c6ab..98ff8d0 100644 --- a/src/org/springframework/beans/factory/stereotype/Component.java +++ b/src/org/springframework/beans/factory/stereotype/Component.java @@ -6,4 +6,4 @@ @Retention(RetentionPolicy.RUNTIME) public @interface Component { -} +} \ No newline at end of file From b9d699ba1e3cb6911abe464e1d7cbc53c92e8a21 Mon Sep 17 00:00:00 2001 From: JavaEEPRO Date: Fri, 1 Mar 2019 17:18:21 +0200 Subject: [PATCH 2/2] BeanNameAware interface and implementation --- src/main/java/si/inspirited/Main.java | 1 + src/main/java/si/inspirited/PromotionsService.java | 13 ++++++++++++- .../springframework/beans/factory/BeanFactory.java | 13 ++++++++++++- .../beans/factory/BeanNameAware.java | 6 ++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/org/springframework/beans/factory/BeanNameAware.java diff --git a/src/main/java/si/inspirited/Main.java b/src/main/java/si/inspirited/Main.java index dd6bea9..c775573 100644 --- a/src/main/java/si/inspirited/Main.java +++ b/src/main/java/si/inspirited/Main.java @@ -8,5 +8,6 @@ public static void main(String[] args) { BeanFactory beanFactory = new BeanFactory(); beanFactory.instantiate("main.java.si.inspirited"); beanFactory.populateProperties(); + beanFactory.injectBeanNames(); } } diff --git a/src/main/java/si/inspirited/PromotionsService.java b/src/main/java/si/inspirited/PromotionsService.java index dd2daae..dbe4aa2 100644 --- a/src/main/java/si/inspirited/PromotionsService.java +++ b/src/main/java/si/inspirited/PromotionsService.java @@ -1,8 +1,19 @@ package main.java.si.inspirited; +import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.stereotype.Component; @Component -public class PromotionsService { +public class PromotionsService implements BeanNameAware { + String beanName; + + @Override + public void setBeanName(String name) { + this.beanName = name; + } + + public String getBeanName() { + return this.beanName; + } } \ No newline at end of file diff --git a/src/org/springframework/beans/factory/BeanFactory.java b/src/org/springframework/beans/factory/BeanFactory.java index 61d6976..25e3c2d 100644 --- a/src/org/springframework/beans/factory/BeanFactory.java +++ b/src/org/springframework/beans/factory/BeanFactory.java @@ -4,9 +4,11 @@ import org.springframework.beans.factory.stereotype.Component; import java.io.File; +import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.URISyntaxException; import java.net.URL; import java.util.Enumeration; import java.util.HashMap; @@ -46,7 +48,7 @@ public void instantiate(String basePackage) { } } } - }catch (Exception e) {e.printStackTrace();} + }catch (NoSuchMethodException | ClassNotFoundException | IOException | InstantiationException | IllegalAccessException | InvocationTargetException | URISyntaxException e) {e.printStackTrace();} System.out.println(singletons); } @@ -70,4 +72,13 @@ public void populateProperties(){ } } } + + public void injectBeanNames(){ + for (String name : singletons.keySet()) { + Object bean = singletons.get(name); + if(bean instanceof BeanNameAware){ + ((BeanNameAware) bean).setBeanName(name); + } + } + } } \ No newline at end of file diff --git a/src/org/springframework/beans/factory/BeanNameAware.java b/src/org/springframework/beans/factory/BeanNameAware.java new file mode 100644 index 0000000..7ce1351 --- /dev/null +++ b/src/org/springframework/beans/factory/BeanNameAware.java @@ -0,0 +1,6 @@ +package org.springframework.beans.factory; + +public interface BeanNameAware { + + void setBeanName(String name); +}