From 914ecd34fe09c491c9f6b112b9d98169b1b4541c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 19 Jul 2012 01:24:02 +0200 Subject: [PATCH] DATAMONGO-486 - Polished namespace implementation. Be better citizen regarding namespace support in STS. Moved ParsingUtils to Spring Data Commons. --- .../config/AbstractMongoConfiguration.java | 2 +- .../mongodb/config/MongoDbFactoryParser.java | 61 +++++--- .../data/mongodb/config/MongoParser.java | 81 +++++----- .../mongodb/config/MongoParsingUtils.java | 103 +++++++++++++ .../data/mongodb/config/ParsingUtils.java | 141 ------------------ ...MongoRepositoryConfigurationExtension.java | 8 +- 6 files changed, 188 insertions(+), 208 deletions(-) create mode 100644 spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParsingUtils.java delete mode 100644 spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/ParsingUtils.java diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java index 4547166f2..0a4f7fe50 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java @@ -127,7 +127,7 @@ public abstract class AbstractMongoConfiguration { MongoMappingContext mappingContext = new MongoMappingContext(); mappingContext.setInitialEntitySet(getInitialEntitySet()); mappingContext.setSimpleTypeHolder(customConversions().getSimpleTypeHolder()); - mappingContext.afterPropertiesSet(); + mappingContext.initialize(); return mappingContext; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoDbFactoryParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoDbFactoryParser.java index 4813a4494..6e65a7c63 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoDbFactoryParser.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoDbFactoryParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 by the original author(s). + * Copyright 2011-2012 by the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,19 +15,19 @@ */ package org.springframework.data.mongodb.config; -import static org.springframework.data.mongodb.config.BeanNames.*; -import static org.springframework.data.mongodb.config.ParsingUtils.*; +import static org.springframework.data.config.ParsingUtils.*; +import static org.springframework.data.mongodb.config.MongoParsingUtils.*; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.data.authentication.UserCredentials; +import org.springframework.data.config.BeanComponentDefinitionBuilder; import org.springframework.data.mongodb.core.MongoFactoryBean; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import org.springframework.util.StringUtils; @@ -44,19 +44,29 @@ import com.mongodb.MongoURI; */ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser { + /* + * (non-Javadoc) + * @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#resolveId(org.w3c.dom.Element, org.springframework.beans.factory.support.AbstractBeanDefinition, org.springframework.beans.factory.xml.ParserContext) + */ @Override protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) throws BeanDefinitionStoreException { - String id = element.getAttribute("id"); - if (!StringUtils.hasText(id)) { - id = DB_FACTORY; - } - return id; + + String id = super.resolveId(element, definition, parserContext); + return StringUtils.hasText(id) ? id : BeanNames.DB_FACTORY; } + /* + * (non-Javadoc) + * @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#parseInternal(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext) + */ @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + Object source = parserContext.extractSource(element); + + BeanComponentDefinitionBuilder helper = new BeanComponentDefinitionBuilder(element, parserContext); + String uri = element.getAttribute("uri"); String mongoRef = element.getAttribute("mongo-ref"); String dbname = element.getAttribute("dbname"); @@ -64,12 +74,11 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser { // Common setup BeanDefinitionBuilder dbFactoryBuilder = BeanDefinitionBuilder.genericBeanDefinition(SimpleMongoDbFactory.class); - ParsingUtils.setPropertyValue(element, dbFactoryBuilder, "write-concern", "writeConcern"); + setPropertyValue(dbFactoryBuilder, element, "write-concern", "writeConcern"); if (StringUtils.hasText(uri)) { if (StringUtils.hasText(mongoRef) || StringUtils.hasText(dbname) || userCredentials != null) { - parserContext.getReaderContext().error("Configure either Mongo URI or details individually!", - parserContext.extractSource(element)); + parserContext.getReaderContext().error("Configure either Mongo URI or details individually!", source); } dbFactoryBuilder.addConstructorArgValue(getMongoUri(uri)); @@ -77,19 +86,26 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser { } // Defaulting - mongoRef = StringUtils.hasText(mongoRef) ? mongoRef : registerMongoBeanDefinition(element, parserContext); - dbname = StringUtils.hasText(dbname) ? dbname : "db"; + if (StringUtils.hasText(mongoRef)) { + dbFactoryBuilder.addConstructorArgReference(mongoRef); + } else { + dbFactoryBuilder.addConstructorArgValue(registerMongoBeanDefinition(element, parserContext)); + } - dbFactoryBuilder.addConstructorArgValue(new RuntimeBeanReference(mongoRef)); + dbname = StringUtils.hasText(dbname) ? dbname : "db"; dbFactoryBuilder.addConstructorArgValue(dbname); if (userCredentials != null) { dbFactoryBuilder.addConstructorArgValue(userCredentials); } - ParsingUtils.registerWriteConcernPropertyEditor(parserContext.getRegistry()); + BeanDefinitionBuilder writeConcernPropertyEditorBuilder = getWriteConcernPropertyEditorBuilder(); - return getSourceBeanDefinition(dbFactoryBuilder, parserContext, element); + BeanComponentDefinition component = helper.getComponent(writeConcernPropertyEditorBuilder); + parserContext.registerBeanComponent(component); + + return (AbstractBeanDefinition) helper.getComponentIdButFallback(dbFactoryBuilder, BeanNames.DB_FACTORY) + .getBeanDefinition(); } /** @@ -100,14 +116,13 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser { * @param parserContext must not be {@literal null}. * @return */ - private String registerMongoBeanDefinition(Element element, ParserContext parserContext) { + private BeanDefinition registerMongoBeanDefinition(Element element, ParserContext parserContext) { BeanDefinitionBuilder mongoBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoFactoryBean.class); - ParsingUtils.setPropertyValue(element, mongoBuilder, "host"); - ParsingUtils.setPropertyValue(element, mongoBuilder, "port"); + setPropertyValue(mongoBuilder, element, "host"); + setPropertyValue(mongoBuilder, element, "port"); - return BeanDefinitionReaderUtils.registerWithGeneratedName(mongoBuilder.getBeanDefinition(), - parserContext.getRegistry()); + return getSourceBeanDefinition(mongoBuilder, parserContext, element); } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParser.java index 8c8be401e..f03f9c697 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParser.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.data.mongodb.config; import java.util.Map; -import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.CustomEditorConfigurer; -import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.parsing.BeanComponentDefinition; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.ManagedMap; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; +import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.data.config.BeanComponentDefinitionBuilder; +import org.springframework.data.config.ParsingUtils; import org.springframework.data.mongodb.core.MongoFactoryBean; import org.springframework.util.StringUtils; import org.w3c.dom.Element; @@ -35,54 +35,59 @@ import org.w3c.dom.Element; * Parser for <mongo;gt; definitions. * * @author Mark Pollack + * @author Oliver Gierke */ -public class MongoParser extends AbstractSingleBeanDefinitionParser { +public class MongoParser implements BeanDefinitionParser { - @Override - protected Class getBeanClass(Element element) { - return MongoFactoryBean.class; - } + /* + * (non-Javadoc) + * @see org.springframework.beans.factory.xml.BeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext) + */ + public BeanDefinition parse(Element element, ParserContext parserContext) { - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + Object source = parserContext.extractSource(element); + String id = element.getAttribute("id"); - ParsingUtils.setPropertyValue(element, builder, "port", "port"); - ParsingUtils.setPropertyValue(element, builder, "host", "host"); - ParsingUtils.setPropertyValue(element, builder, "write-concern", "writeConcern"); + BeanComponentDefinitionBuilder helper = new BeanComponentDefinitionBuilder(element, parserContext); - ParsingUtils.parseMongoOptions(element, builder); - ParsingUtils.parseReplicaSet(element, builder); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MongoFactoryBean.class); + ParsingUtils.setPropertyValue(builder, element, "port", "port"); + ParsingUtils.setPropertyValue(builder, element, "host", "host"); + ParsingUtils.setPropertyValue(builder, element, "write-concern", "writeConcern"); - registerServerAddressPropertyEditor(parserContext.getRegistry()); - ParsingUtils.registerWriteConcernPropertyEditor(parserContext.getRegistry()); + MongoParsingUtils.parseMongoOptions(element, builder); + MongoParsingUtils.parseReplicaSet(element, builder); + String defaultedId = StringUtils.hasText(id) ? id : BeanNames.MONGO; + + parserContext.pushContainingComponent(new CompositeComponentDefinition("Mongo", source)); + + BeanComponentDefinition mongoComponent = helper.getComponent(builder, defaultedId); + parserContext.registerBeanComponent(mongoComponent); + BeanComponentDefinition serverAddressPropertyEditor = helper.getComponent(registerServerAddressPropertyEditor()); + parserContext.registerBeanComponent(serverAddressPropertyEditor); + BeanComponentDefinition writeConcernPropertyEditor = helper.getComponent(MongoParsingUtils + .getWriteConcernPropertyEditorBuilder()); + parserContext.registerBeanComponent(writeConcernPropertyEditor); + + parserContext.popAndRegisterContainingComponent(); + + return mongoComponent.getBeanDefinition(); } /** * One should only register one bean definition but want to have the convenience of using * AbstractSingleBeanDefinitionParser but have the side effect of registering a 'default' property editor with the * container. - * - * @param parserContext the ParserContext to */ - private void registerServerAddressPropertyEditor(BeanDefinitionRegistry registry) { + private BeanDefinitionBuilder registerServerAddressPropertyEditor() { - BeanDefinitionBuilder customEditorConfigurer = BeanDefinitionBuilder - .genericBeanDefinition(CustomEditorConfigurer.class); Map customEditors = new ManagedMap(); customEditors.put("com.mongodb.ServerAddress[]", "org.springframework.data.mongodb.config.ServerAddressPropertyEditor"); - customEditorConfigurer.addPropertyValue("customEditors", customEditors); - BeanDefinitionReaderUtils.registerWithGeneratedName(customEditorConfigurer.getBeanDefinition(), registry); - } - @Override - protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) - throws BeanDefinitionStoreException { - String name = super.resolveId(element, definition, parserContext); - if (!StringUtils.hasText(name)) { - name = "mongo"; - } - return name; + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CustomEditorConfigurer.class); + builder.addPropertyValue("customEditors", customEditors); + return builder; } -} \ No newline at end of file +} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParsingUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParsingUtils.java new file mode 100644 index 000000000..6613f7066 --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoParsingUtils.java @@ -0,0 +1,103 @@ +/* + * Copyright 2011-2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.mongodb.config; + +import static org.springframework.data.config.ParsingUtils.*; + +import java.util.Map; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.CustomEditorConfigurer; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.ManagedMap; +import org.springframework.beans.factory.xml.BeanDefinitionParser; +import org.springframework.data.mongodb.core.MongoOptionsFactoryBean; +import org.springframework.util.xml.DomUtils; +import org.w3c.dom.Element; + +/** + * Utility methods for {@link BeanDefinitionParser} implementations for MongoDB. + * + * @author Mark Pollack + * @author Oliver Gierke + */ +abstract class MongoParsingUtils { + + private MongoParsingUtils() { + + } + + /** + * Parses the mongo replica-set element. + * + * @param parserContext the parser context + * @param element the mongo element + * @param mongoBuilder the bean definition builder to populate + * @return + */ + static void parseReplicaSet(Element element, BeanDefinitionBuilder mongoBuilder) { + setPropertyValue(mongoBuilder, element, "replica-set", "replicaSetSeeds"); + } + + /** + * Parses the mongo:options sub-element. Populates the given attribute factory with the proper attributes. + * + * @return true if parsing actually occured, false otherwise + */ + static boolean parseMongoOptions(Element element, BeanDefinitionBuilder mongoBuilder) { + Element optionsElement = DomUtils.getChildElementByTagName(element, "options"); + if (optionsElement == null) { + return false; + } + + BeanDefinitionBuilder optionsDefBuilder = BeanDefinitionBuilder + .genericBeanDefinition(MongoOptionsFactoryBean.class); + + setPropertyValue(optionsDefBuilder, optionsElement, "connections-per-host", "connectionsPerHost"); + setPropertyValue(optionsDefBuilder, optionsElement, "threads-allowed-to-block-for-connection-multiplier", + "threadsAllowedToBlockForConnectionMultiplier"); + setPropertyValue(optionsDefBuilder, optionsElement, "max-wait-time", "maxWaitTime"); + setPropertyValue(optionsDefBuilder, optionsElement, "connect-timeout", "connectTimeout"); + setPropertyValue(optionsDefBuilder, optionsElement, "socket-timeout", "socketTimeout"); + setPropertyValue(optionsDefBuilder, optionsElement, "socket-keep-alive", "socketKeepAlive"); + setPropertyValue(optionsDefBuilder, optionsElement, "auto-connect-retry", "autoConnectRetry"); + setPropertyValue(optionsDefBuilder, optionsElement, "max-auto-connect-retry-time", "maxAutoConnectRetryTime"); + setPropertyValue(optionsDefBuilder, optionsElement, "write-number", "writeNumber"); + setPropertyValue(optionsDefBuilder, optionsElement, "write-timeout", "writeTimeout"); + setPropertyValue(optionsDefBuilder, optionsElement, "write-fsync", "writeFsync"); + setPropertyValue(optionsDefBuilder, optionsElement, "slave-ok", "slaveOk"); + + mongoBuilder.addPropertyValue("mongoOptions", optionsDefBuilder.getBeanDefinition()); + return true; + } + + /** + * Returns the {@link BeanDefinitionBuilder} to build a {@link BeanDefinition} for a + * {@link WriteConcernPropertyEditor}. + * + * @return + */ + static BeanDefinitionBuilder getWriteConcernPropertyEditorBuilder() { + + Map> customEditors = new ManagedMap>(); + customEditors.put("com.mongodb.WriteConcern", WriteConcernPropertyEditor.class); + + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CustomEditorConfigurer.class); + builder.addPropertyValue("customEditors", customEditors); + + return builder; + } +} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/ParsingUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/ParsingUtils.java deleted file mode 100644 index 36a2411d3..000000000 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/ParsingUtils.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2011 by the original author(s). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.data.mongodb.config; - -import java.util.Map; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.CustomEditorConfigurer; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.beans.factory.support.ManagedMap; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.data.mongodb.core.MongoOptionsFactoryBean; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; -import org.springframework.util.xml.DomUtils; -import org.w3c.dom.Element; - -abstract class ParsingUtils { - - /** - * Parses the mongo replica-set element. - * - * @param parserContext the parser context - * @param element the mongo element - * @param mongoBuilder the bean definition builder to populate - * @return true if parsing actually occured, false otherwise - */ - static boolean parseReplicaSet(Element element, BeanDefinitionBuilder mongoBuilder) { - - String replicaSetString = element.getAttribute("replica-set"); - if (StringUtils.hasText(replicaSetString)) { - mongoBuilder.addPropertyValue("replicaSetSeeds", replicaSetString); - } - return true; - - } - - /** - * Parses the mongo:options sub-element. Populates the given attribute factory with the proper attributes. - * - * @return true if parsing actually occured, false otherwise - */ - static boolean parseMongoOptions(Element element, BeanDefinitionBuilder mongoBuilder) { - Element optionsElement = DomUtils.getChildElementByTagName(element, "options"); - if (optionsElement == null) { - return false; - } - - BeanDefinitionBuilder optionsDefBuilder = BeanDefinitionBuilder - .genericBeanDefinition(MongoOptionsFactoryBean.class); - - setPropertyValue(optionsElement, optionsDefBuilder, "connections-per-host", "connectionsPerHost"); - setPropertyValue(optionsElement, optionsDefBuilder, "threads-allowed-to-block-for-connection-multiplier", - "threadsAllowedToBlockForConnectionMultiplier"); - setPropertyValue(optionsElement, optionsDefBuilder, "max-wait-time", "maxWaitTime"); - setPropertyValue(optionsElement, optionsDefBuilder, "connect-timeout", "connectTimeout"); - setPropertyValue(optionsElement, optionsDefBuilder, "socket-timeout", "socketTimeout"); - setPropertyValue(optionsElement, optionsDefBuilder, "socket-keep-alive", "socketKeepAlive"); - setPropertyValue(optionsElement, optionsDefBuilder, "auto-connect-retry", "autoConnectRetry"); - setPropertyValue(optionsElement, optionsDefBuilder, "max-auto-connect-retry-time", "maxAutoConnectRetryTime"); - setPropertyValue(optionsElement, optionsDefBuilder, "write-number", "writeNumber"); - setPropertyValue(optionsElement, optionsDefBuilder, "write-timeout", "writeTimeout"); - setPropertyValue(optionsElement, optionsDefBuilder, "write-fsync", "writeFsync"); - setPropertyValue(optionsElement, optionsDefBuilder, "slave-ok", "slaveOk"); - - mongoBuilder.addPropertyValue("mongoOptions", optionsDefBuilder.getBeanDefinition()); - return true; - } - - static void setPropertyValue(Element element, BeanDefinitionBuilder builder, String attrName, String propertyName) { - String attr = element.getAttribute(attrName); - if (StringUtils.hasText(attr)) { - builder.addPropertyValue(propertyName, attr); - } - } - - /** - * Sets the property with the given attribute name on the given {@link BeanDefinitionBuilder} to the value of the - * attribute with the given name. - * - * @param element must not be {@literal null}. - * @param builder must not be {@literal null}. - * @param attrName must not be {@literal null} or empty. - */ - static void setPropertyValue(Element element, BeanDefinitionBuilder builder, String attrName) { - String attr = element.getAttribute(attrName); - if (StringUtils.hasText(attr)) { - builder.addPropertyValue(attrName, attr); - } - } - - /** - * Returns the {@link BeanDefinition} built by the given {@link BeanDefinitionBuilder} enriched with source - * information derived from the given {@link Element}. - * - * @param builder must not be {@literal null}. - * @param context must not be {@literal null}. - * @param element must not be {@literal null}. - * @return - */ - static AbstractBeanDefinition getSourceBeanDefinition(BeanDefinitionBuilder builder, ParserContext context, - Element element) { - AbstractBeanDefinition definition = builder.getBeanDefinition(); - definition.setSource(context.extractSource(element)); - return definition; - } - - /** - * Registers a {@link WriteConcernPropertyEditor} in the given {@link BeanDefinitionRegistry}. - * - * @param registry must not be {@literal null}. - */ - static void registerWriteConcernPropertyEditor(BeanDefinitionRegistry registry) { - - Assert.notNull(registry); - - BeanDefinitionBuilder customEditorConfigurer = BeanDefinitionBuilder - .genericBeanDefinition(CustomEditorConfigurer.class); - Map> customEditors = new ManagedMap>(); - customEditors.put("com.mongodb.WriteConcern", WriteConcernPropertyEditor.class); - customEditorConfigurer.addPropertyValue("customEditors", customEditors); - BeanDefinitionReaderUtils.registerWithGeneratedName(customEditorConfigurer.getBeanDefinition(), registry); - } -} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/config/MongoRepositoryConfigurationExtension.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/config/MongoRepositoryConfigurationExtension.java index 27395d8cb..6963a9fa1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/config/MongoRepositoryConfigurationExtension.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/config/MongoRepositoryConfigurationExtension.java @@ -17,6 +17,7 @@ package org.springframework.data.mongodb.repository.config; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.data.config.ParsingUtils; import org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean; import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource; import org.springframework.data.repository.config.RepositoryConfigurationExtension; @@ -60,11 +61,8 @@ public class MongoRepositoryConfigurationExtension extends RepositoryConfigurati Element element = config.getElement(); - String attribute = element.getAttribute(MONGO_TEMPLATE_REF); - builder.addPropertyReference("mongoOperations", attribute); - - attribute = element.getAttribute(CREATE_QUERY_INDEXES); - builder.addPropertyValue("createIndexesForQueryMethods", attribute); + ParsingUtils.setPropertyReference(builder, element, MONGO_TEMPLATE_REF, "mongoOperations"); + ParsingUtils.setPropertyValue(builder, element, CREATE_QUERY_INDEXES, "createIndexesForQueryMethods"); } /*