0
私はbytebuddy-agentを使ってJedisクラスの動的フィールドを追加し、JedisClusterコンストラクタでJedisクラスをJVMにロードする3つのJedisインスタンスを作成します。私が混乱させるのは コードJedisCluster cluster = new JedisCluster(nodes)
の前にコードJedis jedis = new Jedis("localhost", 6379)
を置くと、bytebuddy-agentはJedisクラスにダイナミックフィールドを追加します。新しいフィールドをロードするクラスを定義することができます
JedisCluster cluster = new JedisCluster(nodes)
後
Jedis jedis = new Jedis("localhost", 6379)
を置く場合
@Test
public void testOnConstruct() throws Exception {
Jedis jedis = new Jedis("localhost", 6379);
Set<HostAndPort> nodes = new HashSet<>(3);
nodes.add(new HostAndPort("192.168.146.128", 7001));
nodes.add(new HostAndPort("192.168.146.128", 7002));
nodes.add(new HostAndPort("192.168.146.128", 7003));
JedisCluster cluster = new JedisCluster(nodes);
}
、bytebuddyエージェントが正常にJedisクラスに動的にフィールドを追加することはできません。
私はあなたに助けていただきありがとうございます。
すでにロードされているクラスにフィールドを追加するのは問題ではありません.JedisとJedisClusterをインスタンス化する順序です.JedisCのインスタンス化前にJedisのインスタンス化が行われると、Jedisのインスタンス化JedisClusterのintentiationの後、テストコードは失敗します。 – MengZhi
JedisCluster triggのインスタンス化はJedisのロードです。 bytebuddy-agentは、インスタンス化でロードしている別のクラスtrigerがあるクラスに動的フィールドを追加できますか? – MengZhi
https://github.com/raphw/byte-buddy/issues/368 – MengZhi