Skip to content

Commit ef33ad2

Browse files
committed
#189 - Change such that when using a Provider the provider controls the scope of the returned bean/instance
1 parent bafc16a commit ef33ad2

File tree

5 files changed

+8
-35
lines changed

5 files changed

+8
-35
lines changed

inject-test/src/test/java/org/example/coffee/ProviderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void test() {
1717
assertThat(other).isEqualTo("mush mush beans");
1818

1919
ProvOther2 bean2 = context.get(ProvOther2.class);
20-
assertThat(bean2.getaProv()).isSameAs(bean.getaProv());
20+
assertThat(bean2.getaProv()).isNotSameAs(bean.getaProv());
2121
}
2222

2323
}

inject-test/src/test/java/org/example/coffee/provider/FieldInjectProviderTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@ class FieldInjectProviderTest {
99

1010
@Test
1111
void test() {
12-
1312
FieldInjectProvider bean = ApplicationScope.get(FieldInjectProvider.class);
1413
AProv aProv = bean.testGet();
15-
1614
assertThat(aProv).isNotNull();
1715

1816
AProv beanDirect = ApplicationScope.get(AProv.class);
19-
assertThat(aProv).isSameAs(beanDirect);
17+
assertThat(aProv).isNotSameAs(beanDirect);
2018
}
2119
}

inject-test/src/test/java/org/example/coffee/provider/MethodInjectProviderTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@ class MethodInjectProviderTest {
99

1010
@Test
1111
void test() {
12-
1312
MethodInjectProvider bean = ApplicationScope.get(MethodInjectProvider.class);
1413
AProv aProv = bean.testGet();
15-
1614
assertThat(aProv).isNotNull();
1715

1816
AProv beanDirect = ApplicationScope.get(AProv.class);
19-
assertThat(aProv).isSameAs(beanDirect);
17+
assertThat(aProv).isNotSameAs(beanDirect);
2018
}
2119

2220
@Test

inject/src/main/java/io/avaje/inject/spi/DBeanMap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void register(int flag, Object bean) {
6767
}
6868

6969
void register(int flag, Provider<?> provider) {
70-
DContextEntryBean entryBean = DContextEntryBean.prototype(provider, nextBean.name, flag);
70+
DContextEntryBean entryBean = DContextEntryBean.provider(provider, nextBean.name, flag);
7171
for (Type type : nextBean.types) {
7272
beans.computeIfAbsent(type.getTypeName(), s -> new DContextEntry()).add(entryBean);
7373
}

inject/src/main/java/io/avaje/inject/spi/DContextEntryBean.java

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ class DContextEntryBean {
1919
*/
2020
static DContextEntryBean of(Object bean, String name, int flag) {
2121
if (bean instanceof Provider) {
22-
return new DContextEntryBean.Prov((Provider<?>)bean, name, flag);
22+
return new Prov((Provider<?>)bean, name, flag);
2323
} else {
2424
return new DContextEntryBean(bean, name, flag);
2525
}
2626
}
2727

28-
static DContextEntryBean prototype(Provider<?> provider, String name, int flag) {
29-
return new Prototype(provider, name, flag);
28+
static DContextEntryBean provider(Provider<?> provider, String name, int flag) {
29+
return new Prov(provider, name, flag);
3030
}
3131

3232
protected final Object source;
@@ -91,40 +91,17 @@ final boolean isSupplied(String qualifierName) {
9191
}
9292

9393
/**
94-
* Provider based entry - get it once.
94+
* Provider based entry - provider controls the scope of the provided bean.
9595
*/
9696
static final class Prov extends DContextEntryBean {
9797

98-
private Object actualBean;
9998
private final Provider<?> provider;
10099

101100
private Prov(Provider<?> provider, String name, int flag) {
102101
super(provider, name, flag);
103102
this.provider = provider;
104103
}
105104

106-
@Override
107-
Object getBean() {
108-
// it's a provider, get it once
109-
if (actualBean == null) {
110-
actualBean = provider.get();
111-
}
112-
return actualBean;// provider.get();
113-
}
114-
}
115-
116-
/**
117-
* Prototype based entry - new every time.
118-
*/
119-
static final class Prototype extends DContextEntryBean {
120-
121-
private final Provider<?> provider;
122-
123-
private Prototype(Provider<?> provider, String name, int flag) {
124-
super(provider, name, flag);
125-
this.provider = provider;
126-
}
127-
128105
@Override
129106
Provider<?> provider() {
130107
return provider;

0 commit comments

Comments
 (0)