Skip to content

Commit 91e5ef8

Browse files
committed
Ensure that all objects are real beans
1 parent fc185d4 commit 91e5ef8

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,22 @@
1515
*/
1616
package org.socialsignin.spring.data.dynamodb.repository.config;
1717

18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
1823
import org.socialsignin.spring.data.dynamodb.mapping.DynamoDBMappingContext;
1924
import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean;
25+
import org.springframework.beans.factory.config.BeanDefinition;
2026
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
27+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2128
import org.springframework.core.annotation.AnnotationAttributes;
29+
import org.springframework.data.config.BeanComponentDefinitionBuilder;
2230
import org.springframework.data.config.ParsingUtils;
2331
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
2432
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
33+
import org.springframework.data.repository.config.RepositoryConfigurationSource;
2534
import org.springframework.data.repository.config.XmlRepositoryConfigurationSource;
2635
import org.springframework.util.Assert;
2736
import org.springframework.util.StringUtils;
@@ -33,6 +42,8 @@
3342
*/
3443
public class DynamoDBRepositoryConfigExtension extends RepositoryConfigurationExtensionSupport {
3544

45+
private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBRepositoryConfigExtension.class);
46+
3647
private static final String DEFAULT_AMAZON_DYNAMO_DB_BEAN_NAME = "amazonDynamoDB";
3748

3849
private static final String DYNAMO_DB_MAPPER_CONFIG_REF = "dynamodb-mapper-config-ref";
@@ -42,6 +53,8 @@ public class DynamoDBRepositoryConfigExtension extends RepositoryConfigurationEx
4253
private static final String AMAZON_DYNAMODB_REF = "amazon-dynamodb-ref";
4354

4455
private static final String MAPPING_CONTEXT_REF = "mapping-context-ref";
56+
57+
private BeanDefinitionRegistry registry;
4558

4659
@Override
4760
public String getRepositoryFactoryBeanClassName() {
@@ -54,7 +67,6 @@ public void postProcess(BeanDefinitionBuilder builder, AnnotationRepositoryConfi
5467

5568
postProcess(builder, attributes.getString("amazonDynamoDBRef"), attributes.getString("dynamoDBMapperConfigRef"),
5669
attributes.getString("dynamoDBOperationsRef"), attributes.getString("mappingContextRef"));
57-
5870
}
5971

6072
/*
@@ -68,9 +80,9 @@ public void postProcess(BeanDefinitionBuilder builder, AnnotationRepositoryConfi
6880
*/
6981
@Override
7082
public void postProcess(BeanDefinitionBuilder builder, XmlRepositoryConfigurationSource config) {
71-
7283
Element element = config.getElement();
7384

85+
7486
ParsingUtils.setPropertyReference(builder, element, AMAZON_DYNAMODB_REF, "amazonDynamoDB");
7587
ParsingUtils.setPropertyReference(builder, element, DYNAMO_DB_MAPPER_CONFIG_REF, "dynamoDBMapperConfig");
7688
ParsingUtils.setPropertyReference(builder, element, DYNAMO_DB_OPERATIONS_REF, "dynamoDBOperations");
@@ -100,11 +112,25 @@ private void postProcess(BeanDefinitionBuilder builder, String amazonDynamoDBRef
100112
}
101113
}
102114

103-
if (StringUtils.hasText(dynamoDBMappingContextRef)) {
104-
builder.addPropertyReference("dynamoDBMappingContext", dynamoDBMappingContextRef);
105-
} else {
106-
builder.addPropertyValue("dynamoDBMappingContext", new DynamoDBMappingContext());
115+
if (!StringUtils.hasText(dynamoDBMappingContextRef)) {
116+
BeanDefinitionBuilder dynamoDBMappingContextBuilder = BeanDefinitionBuilder.genericBeanDefinition(DynamoDBMappingContext.class);
117+
dynamoDBMappingContextRef = getModulePrefix() + "-dynamoDBMappingContext";
118+
119+
LOGGER.debug("Adding bean <{}> of type <{}>", dynamoDBMappingContextRef, dynamoDBMappingContextBuilder.getBeanDefinition());
120+
121+
assert registry != null;
122+
registry.registerBeanDefinition(dynamoDBMappingContextRef, dynamoDBMappingContextBuilder.getBeanDefinition());
107123
}
124+
builder.addPropertyReference("dynamoDBMappingContext", dynamoDBMappingContextRef);
125+
}
126+
127+
@Override
128+
public void registerBeansForRoot(BeanDefinitionRegistry registry,
129+
RepositoryConfigurationSource configurationSource) {
130+
super.registerBeansForRoot(registry, configurationSource);
131+
132+
// Store for later to be used by #postProcess
133+
this.registry = registry;
108134
}
109135

110136
@Override

0 commit comments

Comments
 (0)