Skip to content

Commit

Permalink
Enhance the precedence of @NacosPropertySource process nacos-group#70
Browse files Browse the repository at this point in the history
  • Loading branch information
mercyblitz committed Dec 6, 2018
1 parent 5ac6e99 commit a6f5784
Show file tree
Hide file tree
Showing 10 changed files with 72 additions and 12 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Complete the following steps to enable Nacos for your Spring project.
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
</dependency>
...
Expand Down
4 changes: 2 additions & 2 deletions nacos-spring-context/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
<parent>
<artifactId>nacos-spring-parent</artifactId>
<groupId>com.alibaba.nacos</groupId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<name>Alibaba Nacos :: Spring :: Context</name>
<packaging>jar</packaging>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
*/
package com.alibaba.nacos.spring.context.annotation;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
Expand All @@ -26,7 +29,12 @@
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotationMetadata;

import static com.alibaba.nacos.spring.util.NacosBeanUtils.*;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.GLOBAL_NACOS_PROPERTIES_BEAN_NAME;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.invokeNacosPropertySourcePostProcessor;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerGlobalNacosProperties;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerNacosCommonBeans;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerNacosConfigBeans;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerNacosDiscoveryBeans;

/**
* Nacos Properties {@link ImportBeanDefinitionRegistrar BeanDefinition Registrar}
Expand All @@ -35,10 +43,12 @@
* @see EnableNacos
* @since 0.1.0
*/
public class NacosBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {
public class NacosBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware, BeanFactoryAware {

private Environment environment;

private BeanFactory beanFactory;

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinition annotationProcessor = BeanDefinitionBuilder.genericBeanDefinition(
Expand All @@ -50,8 +60,11 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B

// Register Global Nacos Properties Bean
registerGlobalNacosProperties(attributes, registry, environment, GLOBAL_NACOS_PROPERTIES_BEAN_NAME);

// Register Nacos Annotation Beans
registerNacosAnnotationBeans(registry);
// Invoke NacosPropertySourcePostProcessor immediately
// in order to enhance the precedence of @NacosPropertySource process
invokeNacosPropertySourcePostProcessor(beanFactory);
}

@Override
Expand All @@ -64,4 +77,9 @@ public void registerNacosAnnotationBeans(BeanDefinitionRegistry registry) {
registerNacosConfigBeans(registry, environment);
registerNacosDiscoveryBeans(registry);
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
package com.alibaba.nacos.spring.context.annotation.config;

import com.alibaba.nacos.spring.util.NacosBeanUtils;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
Expand All @@ -25,7 +29,11 @@
import org.springframework.core.env.PropertyResolver;
import org.springframework.core.type.AnnotationMetadata;

import static com.alibaba.nacos.spring.util.NacosBeanUtils.*;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.CONFIG_GLOBAL_NACOS_PROPERTIES_BEAN_NAME;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.invokeNacosPropertySourcePostProcessor;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerGlobalNacosProperties;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerNacosCommonBeans;
import static com.alibaba.nacos.spring.util.NacosBeanUtils.registerNacosConfigBeans;
import static org.springframework.core.annotation.AnnotationAttributes.fromMap;

/**
Expand All @@ -38,10 +46,13 @@
* @see NacosBeanUtils#registerNacosConfigBeans(BeanDefinitionRegistry, Environment)
* @since 0.1.0
*/
public class NacosConfigBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {
public class NacosConfigBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware,
BeanFactoryAware {

private Environment environment;

private BeanFactory beanFactory;

@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
AnnotationAttributes attributes = fromMap(metadata.getAnnotationAttributes(EnableNacosConfig.class.getName()));
Expand All @@ -51,10 +62,18 @@ public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionR
registerNacosCommonBeans(registry);
// Register Nacos Config Beans
registerNacosConfigBeans(registry, environment);
// Invoke NacosPropertySourcePostProcessor immediately
// in order to enhance the precedence of @NacosPropertySource process
invokeNacosPropertySourcePostProcessor(beanFactory);
}

@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.alibaba.nacos.spring.beans.factory.annotation.ConfigServiceBeanBuilder;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySources;
import com.alibaba.nacos.spring.context.config.xml.NacosPropertySourceXmlBeanDefinition;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
Expand All @@ -39,8 +40,10 @@

import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static com.alibaba.nacos.spring.util.NacosBeanUtils.getConfigServiceBeanBuilder;
import static com.alibaba.nacos.spring.util.NacosUtils.DEFAULT_STRING_ATTRIBUTE_VALUE;
Expand Down Expand Up @@ -69,6 +72,8 @@ public class NacosPropertySourcePostProcessor implements BeanDefinitionRegistryP
*/
public static final String BEAN_NAME = "nacosPropertySourcePostProcessor";

private final Set<String> processedBeanNames = new LinkedHashSet<String>();

private ConfigurableEnvironment environment;

private Collection<AbstractNacosPropertySourceBuilder> nacosPropertySourceBuilders;
Expand All @@ -95,7 +100,12 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)

private void processPropertySource(String beanName, ConfigurableListableBeanFactory beanFactory) {

if (processedBeanNames.contains(beanName)) {
return;
}

BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);

// Build multiple instance if possible
List<NacosPropertySource> nacosPropertySources = buildNacosPropertySources(beanName, beanDefinition);

Expand All @@ -105,6 +115,7 @@ private void processPropertySource(String beanName, ConfigurableListableBeanFact
addListenerIfAutoRefreshed(nacosPropertySource);
}

processedBeanNames.add(beanName);
}

private List<NacosPropertySource> buildNacosPropertySources(String beanName, BeanDefinition beanDefinition) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.SingletonBeanRegistry;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
Expand Down Expand Up @@ -334,6 +335,17 @@ public static void registerNacosConfigBeans(BeanDefinitionRegistry registry, Env
registerLoggingNacosConfigMetadataEventListener(registry);
}

/**
* Invokes {@link NacosPropertySourcePostProcessor}
*
* @param beanFactory {@link BeanFactory}
*/
public static void invokeNacosPropertySourcePostProcessor(BeanFactory beanFactory) {
NacosPropertySourcePostProcessor postProcessor =
beanFactory.getBean(NacosPropertySourcePostProcessor.BEAN_NAME, NacosPropertySourcePostProcessor.class);
postProcessor.postProcessBeanFactory((ConfigurableListableBeanFactory) beanFactory);
}

/**
* Register {@link LoggingNacosConfigMetadataEventListener} Bean
*
Expand Down
2 changes: 1 addition & 1 deletion nacos-spring-samples/nacos-embedded-webserver/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>nacos-spring-parent</artifactId>
<groupId>com.alibaba.nacos</groupId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion nacos-spring-samples/nacos-spring-webmvc-sample/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>nacos-spring-samples</artifactId>
<groupId>com.alibaba.nacos</groupId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion nacos-spring-samples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>nacos-spring-parent</artifactId>
<groupId>com.alibaba.nacos</groupId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-parent</artifactId>
<version>0.1.0-RC1</version>
<version>0.1.0-RC2</version>
<name>Alibaba Nacos :: Spring :: POM</name>
<packaging>pom</packaging>

Expand Down

0 comments on commit a6f5784

Please sign in to comment.