From 4398c827ceb9801a5af43574999cd9c2ebc4be74 Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Sat, 17 Jun 2023 22:00:28 +0900 Subject: [PATCH 1/2] Support processPropertyPlaceHolders option in mapper:scan and @MapperScan Fixes gh-829 (cherry picked from commit 76e8bae48771da0d765c28a84eed442e9640f382) --- .../mybatis/spring/annotation/MapperScan.java | 13 +++- .../annotation/MapperScannerRegistrar.java | 4 +- .../MapperScannerBeanDefinitionParser.java | 7 +- .../mybatis/spring/config/mybatis-spring.xsd | 12 ++- .../spring/annotation/MapperScanTest.java | 76 ++++++++++++++++++- .../org/mybatis/spring/annotation/MyBean.java | 37 +++++++++ .../spring/annotation/override.properties | 17 +++++ .../spring/annotation/placeholders.properties | 17 +++++ .../org/mybatis/spring/config/MyBean.java | 37 +++++++++ .../mybatis/spring/config/MyFactoryBean.java | 30 ++++++++ .../mybatis/spring/config/NamespaceTest.java | 33 +++++++- .../mybatis/spring/config/override.properties | 17 +++++ .../spring/config/placeholders.properties | 17 +++++ .../process-property-placeholders-false.xml | 35 +++++++++ .../process-property-placeholders-true.xml | 36 +++++++++ 15 files changed, 380 insertions(+), 8 deletions(-) create mode 100644 src/test/java/org/mybatis/spring/annotation/MyBean.java create mode 100644 src/test/java/org/mybatis/spring/annotation/override.properties create mode 100644 src/test/java/org/mybatis/spring/annotation/placeholders.properties create mode 100644 src/test/java/org/mybatis/spring/config/MyBean.java create mode 100644 src/test/java/org/mybatis/spring/config/MyFactoryBean.java create mode 100644 src/test/java/org/mybatis/spring/config/override.properties create mode 100644 src/test/java/org/mybatis/spring/config/placeholders.properties create mode 100644 src/test/java/org/mybatis/spring/config/process-property-placeholders-false.xml create mode 100644 src/test/java/org/mybatis/spring/config/process-property-placeholders-true.xml diff --git a/src/main/java/org/mybatis/spring/annotation/MapperScan.java b/src/main/java/org/mybatis/spring/annotation/MapperScan.java index 78c0d9b0bf..9d51b7ce42 100644 --- a/src/main/java/org/mybatis/spring/annotation/MapperScan.java +++ b/src/main/java/org/mybatis/spring/annotation/MapperScan.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 the original author or authors. + * Copyright 2010-2023 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. @@ -185,4 +185,15 @@ */ String defaultScope() default AbstractBeanDefinition.SCOPE_DEFAULT; + /** + * Specifies a flag that whether execute a property placeholder processing or not. + *

+ * The default is {@literal true}. This means that a property placeholder processing execute. + * + * @since 3.0.3 + * + * @return a flag that whether execute a property placeholder processing or not + */ + boolean processPropertyPlaceHolders() default true; + } diff --git a/src/main/java/org/mybatis/spring/annotation/MapperScannerRegistrar.java b/src/main/java/org/mybatis/spring/annotation/MapperScannerRegistrar.java index cde801d739..fb8f1f94f6 100644 --- a/src/main/java/org/mybatis/spring/annotation/MapperScannerRegistrar.java +++ b/src/main/java/org/mybatis/spring/annotation/MapperScannerRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 the original author or authors. + * Copyright 2010-2023 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. @@ -82,7 +82,7 @@ void registerBeanDefinitions(AnnotationMetadata annoMeta, AnnotationAttributes a BeanDefinitionRegistry registry, String beanName) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MapperScannerConfigurer.class); - builder.addPropertyValue("processPropertyPlaceHolders", true); + builder.addPropertyValue("processPropertyPlaceHolders", annoAttrs.getBoolean("processPropertyPlaceHolders")); Class annotationClass = annoAttrs.getClass("annotationClass"); if (!Annotation.class.equals(annotationClass)) { diff --git a/src/main/java/org/mybatis/spring/config/MapperScannerBeanDefinitionParser.java b/src/main/java/org/mybatis/spring/config/MapperScannerBeanDefinitionParser.java index d0e40c5777..927cd627d6 100644 --- a/src/main/java/org/mybatis/spring/config/MapperScannerBeanDefinitionParser.java +++ b/src/main/java/org/mybatis/spring/config/MapperScannerBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 the original author or authors. + * Copyright 2010-2023 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. @@ -56,6 +56,7 @@ public class MapperScannerBeanDefinitionParser extends AbstractBeanDefinitionPar private static final String ATTRIBUTE_MAPPER_FACTORY_BEAN_CLASS = "mapper-factory-bean-class"; private static final String ATTRIBUTE_LAZY_INITIALIZATION = "lazy-initialization"; private static final String ATTRIBUTE_DEFAULT_SCOPE = "default-scope"; + private static final String ATTRIBUTE_PROCESS_PROPERTY_PLACEHOLDERS = "process-property-placeholders"; /** * {@inheritDoc} @@ -68,7 +69,9 @@ protected AbstractBeanDefinition parseInternal(Element element, ParserContext pa ClassLoader classLoader = ClassUtils.getDefaultClassLoader(); - builder.addPropertyValue("processPropertyPlaceHolders", true); + String processPropertyPlaceHolders = element.getAttribute(ATTRIBUTE_PROCESS_PROPERTY_PLACEHOLDERS); + builder.addPropertyValue("processPropertyPlaceHolders", + !StringUtils.hasText(processPropertyPlaceHolders) || Boolean.parseBoolean(processPropertyPlaceHolders)); try { String annotationClassName = element.getAttribute(ATTRIBUTE_ANNOTATION); if (StringUtils.hasText(annotationClassName)) { diff --git a/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd b/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd index 1a3d5df381..5366717e4d 100644 --- a/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd +++ b/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd @@ -1,7 +1,7 @@ + + + + + + + + + + + + diff --git a/src/test/java/org/mybatis/spring/config/process-property-placeholders-true.xml b/src/test/java/org/mybatis/spring/config/process-property-placeholders-true.xml new file mode 100644 index 0000000000..d10857c242 --- /dev/null +++ b/src/test/java/org/mybatis/spring/config/process-property-placeholders-true.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + From 696a3a46bbc4d0827fd65ff122b62b3ae99140fe Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Sat, 17 Jun 2023 22:52:32 +0900 Subject: [PATCH 2/2] Change `@since` 2.1.2 --- src/main/java/org/mybatis/spring/annotation/MapperScan.java | 2 +- src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mybatis/spring/annotation/MapperScan.java b/src/main/java/org/mybatis/spring/annotation/MapperScan.java index 9d51b7ce42..d9939fb15c 100644 --- a/src/main/java/org/mybatis/spring/annotation/MapperScan.java +++ b/src/main/java/org/mybatis/spring/annotation/MapperScan.java @@ -190,7 +190,7 @@ *

* The default is {@literal true}. This means that a property placeholder processing execute. * - * @since 3.0.3 + * @since 2.1.2 * * @return a flag that whether execute a property placeholder processing or not */ diff --git a/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd b/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd index 5366717e4d..64162fa10d 100644 --- a/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd +++ b/src/main/resources/org/mybatis/spring/config/mybatis-spring.xsd @@ -152,7 +152,7 @@