Skip to content

Commit f59b155

Browse files
committed
Polish
1 parent df4f22f commit f59b155

File tree

3 files changed

+43
-17
lines changed

3 files changed

+43
-17
lines changed

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaAutoConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
2929
import org.springframework.boot.context.properties.ConfigurationProperties;
3030
import org.springframework.boot.context.properties.EnableConfigurationProperties;
31-
import org.springframework.context.ApplicationContext;
3231
import org.springframework.context.annotation.Bean;
3332
import org.springframework.context.annotation.Configuration;
3433
import org.springframework.dao.support.PersistenceExceptionTranslator;
@@ -80,9 +79,8 @@ public Naming naming() {
8079

8180
@Bean
8281
@ConditionalOnMissingBean
83-
public EntityListenerProvider entityListenerProvider(
84-
ApplicationContext context) {
85-
return new TryLookupEntityListenerProvider(context);
82+
public EntityListenerProvider entityListenerProvider() {
83+
return new TryLookupEntityListenerProvider();
8684
}
8785

8886
@Bean

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/TryLookupEntityListenerProvider.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@
1616
package org.seasar.doma.boot.autoconfigure;
1717

1818
import java.util.Map;
19-
import java.util.Objects;
2019
import java.util.function.Supplier;
2120

2221
import org.seasar.doma.jdbc.EntityListenerProvider;
2322
import org.seasar.doma.jdbc.entity.EntityListener;
23+
import org.springframework.beans.BeansException;
2424
import org.springframework.context.ApplicationContext;
25+
import org.springframework.context.ApplicationContextAware;
2526

2627
/**
2728
* {@link EntityListenerProvider} implementation that
@@ -30,18 +31,24 @@
3031
* @author backpaper0
3132
*
3233
*/
33-
public class TryLookupEntityListenerProvider implements EntityListenerProvider {
34-
35-
private final ApplicationContext context;
36-
37-
public TryLookupEntityListenerProvider(ApplicationContext context) {
38-
this.context = Objects.requireNonNull(context);
39-
}
34+
class TryLookupEntityListenerProvider implements EntityListenerProvider, ApplicationContextAware {
4035

36+
private ApplicationContext context;
37+
4138
@Override
4239
public <ENTITY, LISTENER extends EntityListener<ENTITY>> LISTENER get(
4340
Class<LISTENER> listenerClass, Supplier<LISTENER> listenerSupplier) {
4441
Map<String, LISTENER> beans = context.getBeansOfType(listenerClass);
42+
if (beans.size() > 1) {
43+
throw new IllegalStateException(
44+
"Bean type of " + listenerClass + " bean must be unique!");
45+
}
4546
return beans.values().stream().findAny().orElseGet(listenerSupplier);
4647
}
48+
49+
@Override
50+
public void setApplicationContext(ApplicationContext applicationContext)
51+
throws BeansException {
52+
this.context = applicationContext;
53+
}
4754
}

doma-spring-boot-autoconfigure/src/test/java/org/seasar/doma/boot/autoconfigure/TryLookupEntityListenerProviderTest.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.beans.factory.annotation.Autowired;
2424
import org.springframework.context.ApplicationContext;
2525
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
26+
import org.springframework.context.annotation.Bean;
2627
import org.springframework.stereotype.Component;
2728

2829
public class TryLookupEntityListenerProviderTest {
@@ -32,20 +33,28 @@ public void testManaged() throws Exception {
3233
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
3334
context.register(FooListener.class);
3435
context.refresh();
35-
TryLookupEntityListenerProvider provider = new TryLookupEntityListenerProvider(
36-
context);
36+
TryLookupEntityListenerProvider provider = new TryLookupEntityListenerProvider();
37+
provider.setApplicationContext(context);
3738
FooListener listener = provider
3839
.get(FooListener.class, FooListener::new);
3940
assertThat(listener.managed, is(true));
4041
}
4142

43+
@Test(expected = IllegalStateException.class)
44+
public void testManaged_notUnique() throws Exception {
45+
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
46+
FooConfig.class);
47+
TryLookupEntityListenerProvider provider = new TryLookupEntityListenerProvider();
48+
provider.setApplicationContext(context);
49+
provider.get(FooListener.class, FooListener::new);
50+
}
51+
4252
@Test
4353
public void testNotManaged() throws Exception {
4454
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
45-
//context.register(FooListener.class);
4655
context.refresh();
47-
TryLookupEntityListenerProvider provider = new TryLookupEntityListenerProvider(
48-
context);
56+
TryLookupEntityListenerProvider provider = new TryLookupEntityListenerProvider();
57+
provider.setApplicationContext(context);
4958
FooListener listener = provider
5059
.get(FooListener.class, FooListener::new);
5160
assertThat(listener.managed, is(false));
@@ -67,4 +76,16 @@ public FooListener(ApplicationContext context) {
6776
managed = true;
6877
}
6978
}
79+
80+
public static class FooConfig {
81+
@Bean
82+
FooListener foo1() {
83+
return new FooListener();
84+
}
85+
86+
@Bean
87+
FooListener foo2() {
88+
return new FooListener();
89+
}
90+
}
7091
}

0 commit comments

Comments
 (0)