Skip to content

Commit 1955e8d

Browse files
committed
Avoid inheritance in configuration classes
This commit restructures configuration classes to avoid inheritance, where possible. This should provide more flexibility when composing custom configurations. Closes gh-1415
1 parent 33e9b02 commit 1955e8d

File tree

8 files changed

+24
-16
lines changed

8 files changed

+24
-16
lines changed

spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.context.EmbeddedValueResolverAware;
2727
import org.springframework.context.annotation.Bean;
2828
import org.springframework.context.annotation.Configuration;
29+
import org.springframework.context.annotation.Import;
2930
import org.springframework.context.annotation.ImportAware;
3031
import org.springframework.core.annotation.AnnotationAttributes;
3132
import org.springframework.core.serializer.support.DeserializingConverter;
@@ -52,8 +53,8 @@
5253
* @since 1.2
5354
*/
5455
@Configuration(proxyBeanMethods = false)
55-
public class MongoHttpSessionConfiguration extends SpringHttpSessionConfiguration
56-
implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
56+
@Import(SpringHttpSessionConfiguration.class)
57+
public class MongoHttpSessionConfiguration implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
5758

5859
private AbstractMongoSessionConverter mongoSessionConverter;
5960

spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/config/annotation/web/reactive/ReactiveMongoWebSessionConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.context.EmbeddedValueResolverAware;
2727
import org.springframework.context.annotation.Bean;
2828
import org.springframework.context.annotation.Configuration;
29+
import org.springframework.context.annotation.Import;
2930
import org.springframework.context.annotation.ImportAware;
3031
import org.springframework.core.annotation.AnnotationAttributes;
3132
import org.springframework.core.serializer.support.DeserializingConverter;
@@ -49,10 +50,11 @@
4950
* {@link ReactiveMongoOperations}.
5051
*
5152
* @author Greg Turnquist
52-
* @author Vedran Pavić
53+
* @author Vedran Pavic
5354
*/
5455
@Configuration(proxyBeanMethods = false)
55-
public class ReactiveMongoWebSessionConfiguration extends SpringWebSessionConfiguration
56+
@Import(SpringWebSessionConfiguration.class)
57+
public class ReactiveMongoWebSessionConfiguration
5658
implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
5759

5860
private AbstractMongoSessionConverter mongoSessionConverter;

spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/AbstractRedisHttpSessionConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.beans.factory.annotation.Autowired;
2626
import org.springframework.beans.factory.annotation.Qualifier;
2727
import org.springframework.context.annotation.Configuration;
28+
import org.springframework.context.annotation.Import;
2829
import org.springframework.data.redis.connection.RedisConnectionFactory;
2930
import org.springframework.data.redis.core.RedisTemplate;
3031
import org.springframework.data.redis.serializer.RedisSerializer;
@@ -51,8 +52,9 @@
5152
* @see SpringSessionRedisConnectionFactory
5253
*/
5354
@Configuration(proxyBeanMethods = false)
55+
@Import(SpringHttpSessionConfiguration.class)
5456
public abstract class AbstractRedisHttpSessionConfiguration<T extends SessionRepository<? extends Session>>
55-
extends SpringHttpSessionConfiguration implements BeanClassLoaderAware {
57+
implements BeanClassLoaderAware {
5658

5759
private Duration maxInactiveInterval = MapSession.DEFAULT_MAX_INACTIVE_INTERVAL;
5860

spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.context.EmbeddedValueResolverAware;
2929
import org.springframework.context.annotation.Bean;
3030
import org.springframework.context.annotation.Configuration;
31+
import org.springframework.context.annotation.Import;
3132
import org.springframework.context.annotation.ImportAware;
3233
import org.springframework.core.annotation.AnnotationAttributes;
3334
import org.springframework.core.type.AnnotationMetadata;
@@ -57,8 +58,8 @@
5758
* @see EnableRedisWebSession
5859
*/
5960
@Configuration(proxyBeanMethods = false)
60-
public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration
61-
implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
61+
@Import(SpringWebSessionConfiguration.class)
62+
public class RedisWebSessionConfiguration implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
6263

6364
private Duration maxInactiveInterval = MapSession.DEFAULT_MAX_INACTIVE_INTERVAL;
6465

spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ void namedConnectionFactoryRedisConfig() {
191191
void multipleConnectionFactoryRedisConfig() {
192192
assertThatExceptionOfType(BeanCreationException.class)
193193
.isThrownBy(() -> registerAndRefresh(RedisConfig.class, MultipleConnectionFactoryRedisConfig.class))
194-
.withCauseInstanceOf(NoUniqueBeanDefinitionException.class).havingCause()
194+
.havingRootCause().isInstanceOf(NoUniqueBeanDefinitionException.class)
195195
.withMessageContaining("expected single matching bean but found 2");
196196
}
197197

spring-session-hazelcast/src/main/java/org/springframework/session/hazelcast/config/annotation/web/http/HazelcastHttpSessionConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.context.ApplicationEventPublisher;
2929
import org.springframework.context.annotation.Bean;
3030
import org.springframework.context.annotation.Configuration;
31+
import org.springframework.context.annotation.Import;
3132
import org.springframework.context.annotation.ImportAware;
3233
import org.springframework.core.annotation.AnnotationAttributes;
3334
import org.springframework.core.type.AnnotationMetadata;
@@ -55,7 +56,8 @@
5556
* @see EnableHazelcastHttpSession
5657
*/
5758
@Configuration(proxyBeanMethods = false)
58-
public class HazelcastHttpSessionConfiguration extends SpringHttpSessionConfiguration implements ImportAware {
59+
@Import(SpringHttpSessionConfiguration.class)
60+
public class HazelcastHttpSessionConfiguration implements ImportAware {
5961

6062
private Duration maxInactiveInterval = MapSession.DEFAULT_MAX_INACTIVE_INTERVAL;
6163

spring-session-hazelcast/src/test/java/org/springframework/session/hazelcast/config/annotation/web/http/HazelcastHttpSessionConfigurationTests.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,8 @@ void closeContext() {
7171
@Test
7272
void noHazelcastInstanceConfiguration() {
7373
assertThatExceptionOfType(BeanCreationException.class)
74-
.isThrownBy(() -> registerAndRefresh(NoHazelcastInstanceConfiguration.class))
75-
.withCauseInstanceOf(NoSuchBeanDefinitionException.class).havingCause()
76-
.withMessageContaining("HazelcastInstance");
74+
.isThrownBy(() -> registerAndRefresh(NoHazelcastInstanceConfiguration.class)).havingRootCause()
75+
.isInstanceOf(NoSuchBeanDefinitionException.class).withMessageContaining("HazelcastInstance");
7776
}
7877

7978
@Test
@@ -206,8 +205,8 @@ void namedHazelcastInstanceConfiguration() {
206205
@Test
207206
void multipleHazelcastInstanceConfiguration() {
208207
assertThatExceptionOfType(BeanCreationException.class)
209-
.isThrownBy(() -> registerAndRefresh(MultipleHazelcastInstanceConfiguration.class))
210-
.withCauseInstanceOf(NoUniqueBeanDefinitionException.class).havingCause()
208+
.isThrownBy(() -> registerAndRefresh(MultipleHazelcastInstanceConfiguration.class)).havingRootCause()
209+
.isInstanceOf(NoUniqueBeanDefinitionException.class)
211210
.withMessageContaining("expected single matching bean but found 2");
212211
}
213212

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.context.EmbeddedValueResolverAware;
3232
import org.springframework.context.annotation.Bean;
3333
import org.springframework.context.annotation.Configuration;
34+
import org.springframework.context.annotation.Import;
3435
import org.springframework.context.annotation.ImportAware;
3536
import org.springframework.core.annotation.AnnotationAttributes;
3637
import org.springframework.core.convert.ConversionService;
@@ -75,8 +76,8 @@
7576
* @see EnableJdbcHttpSession
7677
*/
7778
@Configuration(proxyBeanMethods = false)
78-
public class JdbcHttpSessionConfiguration extends SpringHttpSessionConfiguration
79-
implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
79+
@Import(SpringHttpSessionConfiguration.class)
80+
public class JdbcHttpSessionConfiguration implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
8081

8182
private Duration maxInactiveInterval = MapSession.DEFAULT_MAX_INACTIVE_INTERVAL;
8283

0 commit comments

Comments
 (0)