38
38
import org .springframework .data .redis .connection .Message ;
39
39
import org .springframework .data .redis .connection .RedisConnection ;
40
40
import org .springframework .data .redis .connection .RedisConnectionFactory ;
41
+ import org .springframework .data .redis .core .convert .IndexResolverImpl ;
42
+ import org .springframework .data .redis .core .convert .MappingRedisConverter ;
41
43
import org .springframework .data .redis .core .convert .RedisConverter ;
42
44
import org .springframework .data .redis .core .convert .RedisData ;
45
+ import org .springframework .data .redis .core .convert .ReferenceResolver ;
46
+ import org .springframework .data .redis .core .mapping .RedisMappingContext ;
43
47
import org .springframework .data .redis .listener .KeyExpirationEventMessageListener ;
44
48
import org .springframework .data .redis .listener .RedisMessageListenerContainer ;
45
49
import org .springframework .data .redis .util .ByteUtils ;
@@ -61,21 +65,35 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter implements App
61
65
private RedisMessageListenerContainer messageListenerContainer ;
62
66
private KeyExpirationEventMessageListener expirationListener ;
63
67
68
+ public RedisKeyValueAdapter (RedisOperations <?, ?> redisOps ) {
69
+ this (redisOps , new RedisMappingContext ());
70
+ }
71
+
72
+ public RedisKeyValueAdapter (RedisOperations <?, ?> redisOps , RedisMappingContext mappingContext ) {
73
+
74
+ super (new RedisQueryEngine ());
75
+
76
+ Assert .notNull (redisOps , "RedisOperations must not be null!" );
77
+
78
+ MappingRedisConverter mappingConverter = new MappingRedisConverter (mappingContext , new IndexResolverImpl (
79
+ mappingContext .getMappingConfiguration ().getIndexConfiguration ()), new ReferenceResolverImpl (this ));
80
+ mappingConverter .afterPropertiesSet ();
81
+
82
+ converter = mappingConverter ;
83
+ this .redisOps = redisOps ;
84
+
85
+ initKeyExpirationListener ();
86
+ }
87
+
64
88
/**
65
89
* @param redisOps must not be {@literal null}.
66
90
* @param mappingContext must not be {@literal null}.
67
91
*/
68
- // TODO: change context to RedisConverter
69
92
public RedisKeyValueAdapter (RedisOperations <?, ?> redisOps , RedisConverter redisConverter ) {
70
93
71
94
super (new RedisQueryEngine ());
72
95
73
96
Assert .notNull (redisOps , "RedisOperations must not be null!" );
74
- // Assert.notNull(mappingContext, "RedisMappingContext must not be null!");
75
- //
76
- // MappingRedisConverter mappingConverter = new MappingRedisConverter(mappingContext, new IndexResolverImpl(
77
- // mappingContext.getMappingConfiguration().getIndexConfiguration()), new ReferenceResolverImpl(this));
78
- // mappingConverter.afterPropertiesSet();
79
97
80
98
converter = redisConverter ;
81
99
this .redisOps = redisOps ;
@@ -454,4 +472,33 @@ private boolean isKeyExpirationMessage(Message message) {
454
472
}
455
473
}
456
474
475
+ static class ReferenceResolverImpl implements ReferenceResolver {
476
+
477
+ private RedisKeyValueAdapter adapter ;
478
+
479
+ ReferenceResolverImpl () {
480
+
481
+ }
482
+
483
+ /**
484
+ * @param adapter must not be {@literal null}.
485
+ */
486
+ public ReferenceResolverImpl (RedisKeyValueAdapter adapter ) {
487
+ this .adapter = adapter ;
488
+ }
489
+
490
+ public void setAdapter (RedisKeyValueAdapter adapter ) {
491
+ this .adapter = adapter ;
492
+ }
493
+
494
+ /*
495
+ * (non-Javadoc)
496
+ * @see org.springframework.data.redis.core.convert.ReferenceResolver#resolveReference(java.io.Serializable, java.io.Serializable, java.lang.Class)
497
+ */
498
+ @ Override
499
+ public <T > T resolveReference (Serializable id , Serializable keyspace , Class <T > type ) {
500
+ return (T ) adapter .get (id , keyspace );
501
+ }
502
+ }
503
+
457
504
}
0 commit comments