Skip to content

Commit 942cb07

Browse files
authored
🎨 重构小程序模块自动注入代码
1 parent 3eabfed commit 942cb07

File tree

11 files changed

+351
-135
lines changed

11 files changed

+351
-135
lines changed

spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,18 @@
2222
<dependency>
2323
<groupId>redis.clients</groupId>
2424
<artifactId>jedis</artifactId>
25+
<scope>provided</scope>
26+
</dependency>
27+
<dependency>
28+
<groupId>org.redisson</groupId>
29+
<artifactId>redisson</artifactId>
30+
<scope>provided</scope>
2531
</dependency>
2632
<dependency>
2733
<groupId>org.springframework.data</groupId>
2834
<artifactId>spring-data-redis</artifactId>
2935
<version>${spring.boot.version}</version>
36+
<scope>provided</scope>
3037
</dependency>
3138
</dependencies>
3239

Lines changed: 5 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,21 @@
11
package com.binarywang.spring.starter.wxjava.miniapp.config;
22

3-
import cn.binarywang.wx.miniapp.api.WxMaService;
4-
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceHttpClientImpl;
5-
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
6-
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceJoddHttpImpl;
7-
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceOkHttpImpl;
8-
import cn.binarywang.wx.miniapp.config.WxMaConfig;
9-
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
10-
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
11-
import com.binarywang.spring.starter.wxjava.miniapp.enums.HttpClientType;
12-
import com.binarywang.spring.starter.wxjava.miniapp.properties.RedisProperties;
133
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
14-
import lombok.AllArgsConstructor;
15-
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
16-
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
17-
import me.chanjar.weixin.common.redis.WxRedisOps;
18-
import org.apache.commons.lang3.StringUtils;
19-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
20-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
21-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
224
import org.springframework.boot.context.properties.EnableConfigurationProperties;
23-
import org.springframework.context.ApplicationContext;
24-
import org.springframework.context.annotation.Bean;
255
import org.springframework.context.annotation.Configuration;
26-
import org.springframework.data.redis.core.StringRedisTemplate;
27-
import redis.clients.jedis.JedisPool;
28-
import redis.clients.jedis.JedisPoolConfig;
6+
import org.springframework.context.annotation.Import;
297

308
/**
319
* 自动配置.
3210
*
3311
* @author <a href="https://github.com/binarywang">Binary Wang</a>
3412
* @date 2019-08-10
3513
*/
36-
@AllArgsConstructor
3714
@Configuration
38-
@ConditionalOnClass(WxMaService.class)
3915
@EnableConfigurationProperties(WxMaProperties.class)
40-
@ConditionalOnProperty(prefix = "wx.miniapp", value = "enabled", matchIfMissing = true)
16+
@Import({
17+
WxMaStorageAutoConfiguration.class,
18+
WxMaServiceAutoConfiguration.class
19+
})
4120
public class WxMaAutoConfiguration {
42-
43-
private final WxMaProperties wxMaProperties;
44-
private final ApplicationContext applicationContext;
45-
46-
/**
47-
* 小程序service.
48-
*
49-
* @return 小程序service
50-
*/
51-
@Bean
52-
@ConditionalOnMissingBean(WxMaService.class)
53-
public WxMaService service(WxMaConfig wxMaConfig) {
54-
HttpClientType httpClientType = wxMaProperties.getConfigStorage().getHttpClientType();
55-
WxMaService wxMaService;
56-
switch (httpClientType) {
57-
case OkHttp:
58-
wxMaService = new WxMaServiceOkHttpImpl();
59-
break;
60-
case JoddHttp:
61-
wxMaService = new WxMaServiceJoddHttpImpl();
62-
break;
63-
case HttpClient:
64-
wxMaService = new WxMaServiceHttpClientImpl();
65-
break;
66-
default:
67-
wxMaService = new WxMaServiceImpl();
68-
break;
69-
}
70-
wxMaService.setWxMaConfig(wxMaConfig);
71-
return wxMaService;
72-
}
73-
74-
@Bean
75-
@ConditionalOnMissingBean(WxMaConfig.class)
76-
public WxMaConfig wxMaConfig() {
77-
WxMaDefaultConfigImpl config;
78-
switch (wxMaProperties.getConfigStorage().getType()) {
79-
case Jedis:
80-
config = WxMaRedisBetterConfig.config(wxMaProperties, applicationContext);
81-
break;
82-
case RedisTemplate:
83-
config = wxMaRedisTemplateConfigStorage();
84-
break;
85-
default:
86-
config = wxMaDefaultConfigStorage();
87-
break;
88-
}
89-
90-
config.setAppid(StringUtils.trimToNull(this.wxMaProperties.getAppid()));
91-
config.setSecret(StringUtils.trimToNull(this.wxMaProperties.getSecret()));
92-
config.setToken(StringUtils.trimToNull(this.wxMaProperties.getToken()));
93-
config.setAesKey(StringUtils.trimToNull(this.wxMaProperties.getAesKey()));
94-
config.setMsgDataFormat(StringUtils.trimToNull(this.wxMaProperties.getMsgDataFormat()));
95-
96-
WxMaProperties.ConfigStorage configStorageProperties = wxMaProperties.getConfigStorage();
97-
config.setHttpProxyHost(configStorageProperties.getHttpProxyHost());
98-
config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername());
99-
config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword());
100-
if (configStorageProperties.getHttpProxyPort() != null) {
101-
config.setHttpProxyPort(configStorageProperties.getHttpProxyPort());
102-
}
103-
return config;
104-
}
105-
106-
private WxMaDefaultConfigImpl wxMaDefaultConfigStorage() {
107-
return new WxMaDefaultConfigImpl();
108-
}
109-
110-
private static class WxMaRedisBetterConfig {
111-
112-
private static WxMaDefaultConfigImpl config(WxMaProperties wxMaProperties, ApplicationContext context) {
113-
RedisProperties redisProperties = wxMaProperties.getConfigStorage().getRedis();
114-
JedisPool jedisPool;
115-
if (StringUtils.isNotEmpty(redisProperties.getHost())) {
116-
JedisPoolConfig config = new JedisPoolConfig();
117-
if (redisProperties.getMaxActive() != null) {
118-
config.setMaxTotal(redisProperties.getMaxActive());
119-
}
120-
if (redisProperties.getMaxIdle() != null) {
121-
config.setMaxIdle(redisProperties.getMaxIdle());
122-
}
123-
if (redisProperties.getMaxWaitMillis() != null) {
124-
config.setMaxWaitMillis(redisProperties.getMaxWaitMillis());
125-
}
126-
if (redisProperties.getMinIdle() != null) {
127-
config.setMinIdle(redisProperties.getMinIdle());
128-
}
129-
config.setTestOnBorrow(true);
130-
config.setTestWhileIdle(true);
131-
132-
jedisPool = new JedisPool(config, redisProperties.getHost(), redisProperties.getPort(),
133-
redisProperties.getTimeout(), redisProperties.getPassword(), redisProperties.getDatabase());
134-
} else {
135-
jedisPool = context.getBean(JedisPool.class);
136-
}
137-
WxRedisOps redisOps = new JedisWxRedisOps(jedisPool);
138-
return new WxMaRedisBetterConfigImpl(redisOps, wxMaProperties.getConfigStorage().getKeyPrefix());
139-
}
140-
}
141-
142-
143-
private WxMaDefaultConfigImpl wxMaRedisTemplateConfigStorage() {
144-
StringRedisTemplate redisTemplate = applicationContext.getBean(StringRedisTemplate.class);
145-
WxRedisOps redisOps = new RedisTemplateWxRedisOps(redisTemplate);
146-
return new WxMaRedisBetterConfigImpl(redisOps, wxMaProperties.getConfigStorage().getKeyPrefix());
147-
}
14821
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.binarywang.spring.starter.wxjava.miniapp.config;
2+
3+
import cn.binarywang.wx.miniapp.api.WxMaService;
4+
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceHttpClientImpl;
5+
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
6+
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceJoddHttpImpl;
7+
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceOkHttpImpl;
8+
import cn.binarywang.wx.miniapp.config.WxMaConfig;
9+
import com.binarywang.spring.starter.wxjava.miniapp.enums.HttpClientType;
10+
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
11+
import lombok.AllArgsConstructor;
12+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
13+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
14+
import org.springframework.context.annotation.Bean;
15+
import org.springframework.context.annotation.Configuration;
16+
17+
/**
18+
* 微信小程序平台相关服务自动注册.
19+
*
20+
* @author someone TaoYu
21+
*/
22+
@Configuration
23+
@AllArgsConstructor
24+
public class WxMaServiceAutoConfiguration {
25+
26+
private final WxMaProperties wxMaProperties;
27+
28+
/**
29+
* 小程序service.
30+
*
31+
* @return 小程序service
32+
*/
33+
@Bean
34+
@ConditionalOnMissingBean(WxMaService.class)
35+
@ConditionalOnBean(WxMaConfig.class)
36+
public WxMaService wxMaService(WxMaConfig wxMaConfig) {
37+
HttpClientType httpClientType = wxMaProperties.getConfigStorage().getHttpClientType();
38+
WxMaService wxMaService;
39+
switch (httpClientType) {
40+
case OkHttp:
41+
wxMaService = new WxMaServiceOkHttpImpl();
42+
break;
43+
case JoddHttp:
44+
wxMaService = new WxMaServiceJoddHttpImpl();
45+
break;
46+
case HttpClient:
47+
wxMaService = new WxMaServiceHttpClientImpl();
48+
break;
49+
default:
50+
wxMaService = new WxMaServiceImpl();
51+
break;
52+
}
53+
wxMaService.setWxMaConfig(wxMaConfig);
54+
return wxMaService;
55+
}
56+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.binarywang.spring.starter.wxjava.miniapp.config;
2+
3+
import com.binarywang.spring.starter.wxjava.miniapp.config.storage.WxMaInJedisConfigStorageConfiguration;
4+
import com.binarywang.spring.starter.wxjava.miniapp.config.storage.WxMaInMemoryConfigStorageConfiguration;
5+
import com.binarywang.spring.starter.wxjava.miniapp.config.storage.WxMaInRedisTemplateConfigStorageConfiguration;
6+
import com.binarywang.spring.starter.wxjava.miniapp.config.storage.WxMaInRedissonConfigStorageConfiguration;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.context.annotation.Import;
9+
10+
/**
11+
* 微信小程序存储策略自动配置.
12+
*
13+
* @author someone TaoYu
14+
*/
15+
@Configuration
16+
@Import({
17+
WxMaInMemoryConfigStorageConfiguration.class,
18+
WxMaInJedisConfigStorageConfiguration.class,
19+
WxMaInRedisTemplateConfigStorageConfiguration.class,
20+
WxMaInRedissonConfigStorageConfiguration.class
21+
})
22+
public class WxMaStorageAutoConfiguration {
23+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.binarywang.spring.starter.wxjava.miniapp.config.storage;
2+
3+
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
4+
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
5+
import org.apache.commons.lang3.StringUtils;
6+
7+
/**
8+
* @author yl TaoYu
9+
*/
10+
public abstract class AbstractWxMaConfigStorageConfiguration {
11+
12+
protected WxMaDefaultConfigImpl config(WxMaDefaultConfigImpl config, WxMaProperties properties) {
13+
config.setAppid(StringUtils.trimToNull(properties.getAppid()));
14+
config.setSecret(StringUtils.trimToNull(properties.getSecret()));
15+
config.setToken(StringUtils.trimToNull(properties.getToken()));
16+
config.setAesKey(StringUtils.trimToNull(properties.getAesKey()));
17+
config.setMsgDataFormat(StringUtils.trimToNull(properties.getMsgDataFormat()));
18+
19+
WxMaProperties.ConfigStorage configStorageProperties = properties.getConfigStorage();
20+
config.setHttpProxyHost(configStorageProperties.getHttpProxyHost());
21+
config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername());
22+
config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword());
23+
if (configStorageProperties.getHttpProxyPort() != null) {
24+
config.setHttpProxyPort(configStorageProperties.getHttpProxyPort());
25+
}
26+
27+
int maxRetryTimes = configStorageProperties.getMaxRetryTimes();
28+
if (configStorageProperties.getMaxRetryTimes() < 0) {
29+
maxRetryTimes = 0;
30+
}
31+
int retrySleepMillis = configStorageProperties.getRetrySleepMillis();
32+
if (retrySleepMillis < 0) {
33+
retrySleepMillis = 1000;
34+
}
35+
config.setRetrySleepMillis(retrySleepMillis);
36+
config.setMaxRetryTimes(maxRetryTimes);
37+
return config;
38+
}
39+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.binarywang.spring.starter.wxjava.miniapp.config.storage;
2+
3+
import cn.binarywang.wx.miniapp.config.WxMaConfig;
4+
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
5+
import com.binarywang.spring.starter.wxjava.miniapp.properties.RedisProperties;
6+
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
7+
import lombok.RequiredArgsConstructor;
8+
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
9+
import me.chanjar.weixin.common.redis.WxRedisOps;
10+
import org.apache.commons.lang3.StringUtils;
11+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
12+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
13+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
14+
import org.springframework.context.ApplicationContext;
15+
import org.springframework.context.annotation.Bean;
16+
import org.springframework.context.annotation.Configuration;
17+
import redis.clients.jedis.JedisPool;
18+
import redis.clients.jedis.JedisPoolConfig;
19+
20+
/**
21+
* @author yl TaoYu
22+
*/
23+
@Configuration
24+
@ConditionalOnProperty(prefix = WxMaProperties.PREFIX + ".config-storage", name = "type", havingValue = "jedis")
25+
@ConditionalOnClass({JedisPool.class, JedisPoolConfig.class})
26+
@RequiredArgsConstructor
27+
public class WxMaInJedisConfigStorageConfiguration extends AbstractWxMaConfigStorageConfiguration {
28+
private final WxMaProperties properties;
29+
private final ApplicationContext applicationContext;
30+
31+
@Bean
32+
@ConditionalOnMissingBean(WxMaConfig.class)
33+
public WxMaConfig wxMaConfig() {
34+
WxMaRedisBetterConfigImpl config = getWxMaRedisBetterConfigImpl();
35+
return this.config(config, properties);
36+
}
37+
38+
private WxMaRedisBetterConfigImpl getWxMaRedisBetterConfigImpl() {
39+
RedisProperties redisProperties = properties.getConfigStorage().getRedis();
40+
JedisPool jedisPool;
41+
if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) {
42+
jedisPool = getJedisPool();
43+
} else {
44+
jedisPool = applicationContext.getBean(JedisPool.class);
45+
}
46+
WxRedisOps redisOps = new JedisWxRedisOps(jedisPool);
47+
return new WxMaRedisBetterConfigImpl(redisOps, properties.getConfigStorage().getKeyPrefix());
48+
}
49+
50+
private JedisPool getJedisPool() {
51+
WxMaProperties.ConfigStorage storage = properties.getConfigStorage();
52+
RedisProperties redis = storage.getRedis();
53+
54+
JedisPoolConfig config = new JedisPoolConfig();
55+
if (redis.getMaxActive() != null) {
56+
config.setMaxTotal(redis.getMaxActive());
57+
}
58+
if (redis.getMaxIdle() != null) {
59+
config.setMaxIdle(redis.getMaxIdle());
60+
}
61+
if (redis.getMaxWaitMillis() != null) {
62+
config.setMaxWaitMillis(redis.getMaxWaitMillis());
63+
}
64+
if (redis.getMinIdle() != null) {
65+
config.setMinIdle(redis.getMinIdle());
66+
}
67+
config.setTestOnBorrow(true);
68+
config.setTestWhileIdle(true);
69+
70+
return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(), redis.getDatabase());
71+
}
72+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.binarywang.spring.starter.wxjava.miniapp.config.storage;
2+
3+
import cn.binarywang.wx.miniapp.config.WxMaConfig;
4+
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
5+
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9+
import org.springframework.context.annotation.Bean;
10+
import org.springframework.context.annotation.Configuration;
11+
12+
/**
13+
* @author yl TaoYu
14+
*/
15+
@Configuration
16+
@ConditionalOnProperty(prefix = WxMaProperties.PREFIX + ".config-storage", name = "type",
17+
matchIfMissing = true, havingValue = "memory")
18+
@RequiredArgsConstructor
19+
public class WxMaInMemoryConfigStorageConfiguration extends AbstractWxMaConfigStorageConfiguration {
20+
private final WxMaProperties properties;
21+
22+
@Bean
23+
@ConditionalOnMissingBean(WxMaConfig.class)
24+
public WxMaConfig wxMaConfig() {
25+
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
26+
return this.config(config, properties);
27+
}
28+
}

0 commit comments

Comments
 (0)