Skip to content

Commit 6b2467d

Browse files
authored
Merge pull request #1019 from nobodyiam/0.10.1
fix the issue brought by 0.10.0 that Spring related classes are mistakenly loaded via DefaultInjector
2 parents 37b6485 + 3990dc3 commit 6b2467d

File tree

26 files changed

+126
-74
lines changed

26 files changed

+126
-74
lines changed

apollo-adminservice/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.ctrip.framework.apollo</groupId>
66
<artifactId>apollo</artifactId>
7-
<version>0.10.0</version>
7+
<version>0.10.1</version>
88
<relativePath>../pom.xml</relativePath>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>

apollo-adminservice/src/main/docker/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
FROM openjdk:8-jre-alpine
88
MAINTAINER ameizi <sxyx2008@163.com>
99

10-
ENV VERSION 0.10.0
10+
ENV VERSION 0.10.1
1111

1212
RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
1313
&& echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \

apollo-assembly/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.ctrip.framework.apollo</groupId>
66
<artifactId>apollo</artifactId>
7-
<version>0.10.0</version>
7+
<version>0.10.1</version>
88
<relativePath>../pom.xml</relativePath>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>

apollo-biz/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.ctrip.framework.apollo</groupId>
66
<artifactId>apollo</artifactId>
7-
<version>0.10.0</version>
7+
<version>0.10.1</version>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>
1010
<artifactId>apollo-biz</artifactId>

apollo-buildtools/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.ctrip.framework.apollo</groupId>
66
<artifactId>apollo</artifactId>
7-
<version>0.10.0</version>
7+
<version>0.10.1</version>
88
<relativePath>../pom.xml</relativePath>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>

apollo-client/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ If you need this functionality, you could specify the cluster as follows:
8888
<dependency>
8989
<groupId>com.ctrip.framework.apollo</groupId>
9090
<artifactId>apollo-client</artifactId>
91-
<version>0.10.0</version>
91+
<version>0.10.1</version>
9292
</dependency>
9393

9494
## III. Client Usage

apollo-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.ctrip.framework.apollo</groupId>
66
<artifactId>apollo</artifactId>
7-
<version>0.10.0</version>
7+
<version>0.10.1</version>
88
<relativePath>../pom.xml</relativePath>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>

apollo-client/src/main/java/com/ctrip/framework/apollo/build/ApolloInjector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*/
1111
public class ApolloInjector {
1212
private static volatile Injector s_injector;
13-
private static Object lock = new Object();
13+
private static final Object lock = new Object();
1414

1515
private static Injector getInjector() {
1616
if (s_injector == null) {

apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultInjector.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
import com.ctrip.framework.apollo.spi.DefaultConfigFactory;
88
import com.ctrip.framework.apollo.spi.DefaultConfigFactoryManager;
99
import com.ctrip.framework.apollo.spi.DefaultConfigRegistry;
10-
import com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory;
11-
import com.ctrip.framework.apollo.spring.property.PlaceholderHelper;
12-
import com.ctrip.framework.apollo.spring.property.SpringValueRegistry;
1310
import com.ctrip.framework.apollo.tracer.Tracer;
1411
import com.ctrip.framework.apollo.util.ConfigUtil;
1512
import com.ctrip.framework.apollo.util.http.HttpUtil;
@@ -63,9 +60,6 @@ protected void configure() {
6360
bind(HttpUtil.class).in(Singleton.class);
6461
bind(ConfigServiceLocator.class).in(Singleton.class);
6562
bind(RemoteConfigLongPollService.class).in(Singleton.class);
66-
bind(PlaceholderHelper.class).in(Singleton.class);
67-
bind(ConfigPropertySourceFactory.class).in(Singleton.class);
68-
bind(SpringValueRegistry.class).in(Singleton.class);
6963
}
7064
}
7165
}

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/ApolloJsonValueProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.ctrip.framework.apollo.spring.property.PlaceholderHelper;
66
import com.ctrip.framework.apollo.spring.property.SpringValue;
77
import com.ctrip.framework.apollo.spring.property.SpringValueRegistry;
8+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
89
import com.ctrip.framework.apollo.util.ConfigUtil;
910
import com.google.common.base.Preconditions;
1011
import com.google.gson.Gson;
@@ -37,8 +38,8 @@ public class ApolloJsonValueProcessor extends ApolloProcessor implements BeanFac
3738

3839
public ApolloJsonValueProcessor() {
3940
configUtil = ApolloInjector.getInstance(ConfigUtil.class);
40-
placeholderHelper = ApolloInjector.getInstance(PlaceholderHelper.class);
41-
springValueRegistry = ApolloInjector.getInstance(SpringValueRegistry.class);
41+
placeholderHelper = SpringInjector.getInstance(PlaceholderHelper.class);
42+
springValueRegistry = SpringInjector.getInstance(SpringValueRegistry.class);
4243
}
4344

4445
@Override

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/SpringValueProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.ctrip.framework.apollo.spring.property.SpringValueDefinition;
88
import com.ctrip.framework.apollo.spring.property.SpringValueDefinitionProcessor;
99
import com.ctrip.framework.apollo.spring.property.SpringValueRegistry;
10+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
1011
import com.ctrip.framework.apollo.util.ConfigUtil;
1112
import com.google.common.collect.LinkedListMultimap;
1213
import com.google.common.collect.Multimap;
@@ -43,8 +44,8 @@ public class SpringValueProcessor extends ApolloProcessor implements BeanFactory
4344

4445
public SpringValueProcessor() {
4546
configUtil = ApolloInjector.getInstance(ConfigUtil.class);
46-
placeholderHelper = ApolloInjector.getInstance(PlaceholderHelper.class);
47-
springValueRegistry = ApolloInjector.getInstance(SpringValueRegistry.class);
47+
placeholderHelper = SpringInjector.getInstance(PlaceholderHelper.class);
48+
springValueRegistry = SpringInjector.getInstance(SpringValueRegistry.class);
4849
}
4950

5051
@Override

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.ctrip.framework.apollo.core.ConfigConsts;
77
import com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory;
88
import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants;
9+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
910
import com.google.common.base.Splitter;
1011
import java.util.List;
1112
import org.slf4j.Logger;
@@ -37,7 +38,7 @@ public class ApolloApplicationContextInitializer implements
3738
private static final Logger logger = LoggerFactory.getLogger(ApolloApplicationContextInitializer.class);
3839
private static final Splitter NAMESPACE_SPLITTER = Splitter.on(",").omitEmptyStrings().trimResults();
3940

40-
private final ConfigPropertySourceFactory configPropertySourceFactory = ApolloInjector
41+
private final ConfigPropertySourceFactory configPropertySourceFactory = SpringInjector
4142
.getInstance(ConfigPropertySourceFactory.class);
4243

4344
@Override

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/config/PropertySourcesProcessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.ctrip.framework.apollo.build.ApolloInjector;
44
import com.ctrip.framework.apollo.spring.property.AutoUpdateConfigChangeListener;
5+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
56
import com.ctrip.framework.apollo.util.ConfigUtil;
67
import com.google.common.collect.ImmutableSortedSet;
78
import com.google.common.collect.LinkedHashMultimap;
@@ -39,7 +40,7 @@ public class PropertySourcesProcessor implements BeanFactoryPostProcessor, Envir
3940
private static final Multimap<Integer, String> NAMESPACE_NAMES = LinkedHashMultimap.create();
4041
private static final AtomicBoolean INITIALIZED = new AtomicBoolean(false);
4142

42-
private final ConfigPropertySourceFactory configPropertySourceFactory = ApolloInjector
43+
private final ConfigPropertySourceFactory configPropertySourceFactory = SpringInjector
4344
.getInstance(ConfigPropertySourceFactory.class);
4445
private final ConfigUtil configUtil = ApolloInjector.getInstance(ConfigUtil.class);
4546
private ConfigurableEnvironment environment;

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/AutoUpdateConfigChangeListener.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.ctrip.framework.apollo.model.ConfigChange;
77
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
88
import com.ctrip.framework.apollo.spring.annotation.SpringValueProcessor;
9+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
910
import com.google.gson.Gson;
1011
import java.lang.reflect.Field;
1112
import java.lang.reflect.Type;
@@ -39,8 +40,8 @@ public AutoUpdateConfigChangeListener(Environment environment, ConfigurableLista
3940
this.beanFactory = beanFactory;
4041
this.typeConverter = this.beanFactory.getTypeConverter();
4142
this.environment = environment;
42-
this.placeholderHelper = ApolloInjector.getInstance(PlaceholderHelper.class);
43-
this.springValueRegistry = ApolloInjector.getInstance(SpringValueRegistry.class);
43+
this.placeholderHelper = SpringInjector.getInstance(PlaceholderHelper.class);
44+
this.springValueRegistry = SpringInjector.getInstance(SpringValueRegistry.class);
4445
this.gson = new Gson();
4546
}
4647

apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/SpringValueDefinitionProcessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ctrip.framework.apollo.spring.property;
22

3+
import com.ctrip.framework.apollo.spring.util.SpringInjector;
34
import java.util.List;
45
import java.util.Set;
56

@@ -38,7 +39,7 @@ public class SpringValueDefinitionProcessor implements BeanDefinitionRegistryPos
3839

3940
public SpringValueDefinitionProcessor() {
4041
configUtil = ApolloInjector.getInstance(ConfigUtil.class);
41-
placeholderHelper = ApolloInjector.getInstance(PlaceholderHelper.class);
42+
placeholderHelper = SpringInjector.getInstance(PlaceholderHelper.class);
4243
}
4344

4445
@Override
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.ctrip.framework.apollo.spring.util;
2+
3+
import com.ctrip.framework.apollo.exceptions.ApolloConfigException;
4+
import com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory;
5+
import com.ctrip.framework.apollo.spring.property.PlaceholderHelper;
6+
import com.ctrip.framework.apollo.spring.property.SpringValueRegistry;
7+
import com.ctrip.framework.apollo.tracer.Tracer;
8+
import com.google.inject.AbstractModule;
9+
import com.google.inject.Guice;
10+
import com.google.inject.Injector;
11+
import com.google.inject.Singleton;
12+
13+
public class SpringInjector {
14+
private static volatile Injector s_injector;
15+
private static final Object lock = new Object();
16+
17+
private static Injector getInjector() {
18+
if (s_injector == null) {
19+
synchronized (lock) {
20+
if (s_injector == null) {
21+
try {
22+
s_injector = Guice.createInjector(new SpringModule());
23+
} catch (Throwable ex) {
24+
ApolloConfigException exception = new ApolloConfigException("Unable to initialize Apollo Spring Injector!", ex);
25+
Tracer.logError(exception);
26+
throw exception;
27+
}
28+
}
29+
}
30+
}
31+
32+
return s_injector;
33+
}
34+
35+
public static <T> T getInstance(Class<T> clazz) {
36+
try {
37+
return getInjector().getInstance(clazz);
38+
} catch (Throwable ex) {
39+
Tracer.logError(ex);
40+
throw new ApolloConfigException(
41+
String.format("Unable to load instance for %s!", clazz.getName()), ex);
42+
}
43+
}
44+
45+
private static class SpringModule extends AbstractModule {
46+
@Override
47+
protected void configure() {
48+
bind(PlaceholderHelper.class).in(Singleton.class);
49+
bind(ConfigPropertySourceFactory.class).in(Singleton.class);
50+
bind(SpringValueRegistry.class).in(Singleton.class);
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)