1
+ package org .springframework .boot .autoconfigure .data .redis ;
2
+
3
+ import org .springframework .beans .factory .support .RootBeanDefinition ;
4
+ import org .springframework .context .ApplicationContextInitializer ;
5
+ import org .springframework .context .support .GenericApplicationContext ;
6
+ import org .springframework .core .ResolvableType ;
7
+ import org .springframework .data .redis .connection .RedisConnectionFactory ;
8
+ import org .springframework .data .redis .core .RedisTemplate ;
9
+ import org .springframework .data .redis .core .StringRedisTemplate ;
10
+
11
+ import java .net .UnknownHostException ;
12
+
13
+ /**
14
+ * {@link ApplicationContextInitializer} adapter for {@link RedisAutoConfiguration}
15
+ */
16
+ public class RedisInitializer implements ApplicationContextInitializer <GenericApplicationContext > {
17
+ @ Override
18
+ public void initialize (GenericApplicationContext context ) {
19
+ context .registerBeanDefinition ("redisTemplate" , getRedisTemplateBeanDefinition (context ));
20
+ context .registerBean ("stringRedisTemplate" , StringRedisTemplate .class , () -> getStringRedisTemplate (context ));
21
+ }
22
+
23
+ private RootBeanDefinition getRedisTemplateBeanDefinition (GenericApplicationContext context ) {
24
+ RootBeanDefinition beanDefinition = new RootBeanDefinition (RedisTemplate .class , () -> getRedisTemplate (context ));
25
+ beanDefinition .setTargetType (ResolvableType .forClassWithGenerics (RedisTemplate .class , Object .class , Object .class ));
26
+ return beanDefinition ;
27
+ }
28
+
29
+ private RedisTemplate <?, ?> getRedisTemplate (GenericApplicationContext context ) {
30
+ RedisAutoConfiguration redisAutoConfiguration = new RedisAutoConfiguration ();
31
+ try {
32
+ return redisAutoConfiguration .redisTemplate (context .getBean (RedisConnectionFactory .class ));
33
+ } catch (UnknownHostException e ) {
34
+ e .printStackTrace ();
35
+ }
36
+ return null ;
37
+ }
38
+
39
+ private StringRedisTemplate getStringRedisTemplate (GenericApplicationContext context ) {
40
+ RedisAutoConfiguration redisAutoConfiguration = new RedisAutoConfiguration ();
41
+ try {
42
+ return redisAutoConfiguration .stringRedisTemplate (context .getBean (RedisConnectionFactory .class ));
43
+ } catch (UnknownHostException e ) {
44
+ e .printStackTrace ();
45
+ }
46
+ return null ;
47
+ }
48
+ }
0 commit comments