我使用bytebuddy-agent为Jedis类添加动态字段,在JedisCluster构造函数中,将创建三个Jedis实例,这将导致JVM加载Jedis类。令我困惑的是
当我将代码Jedis jedis = new Jedis("localhost", 6379)
放在代码JedisCluster cluster = new JedisCluster(nodes)
之前时,bytebuddy-agent将动态字段成功添加到Jedis类中,如下所示。
@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);
}
如果我将Jedis jedis = new Jedis("localhost", 6379)
放在JedisCluster cluster = new JedisCluster(nodes)
之后,则bytebuddy-agent无法成功将动态字段添加到Jedis类。
我需要你的帮助,谢谢。
答案 0 :(得分:0)
不可能将字段添加到已加载的类中,JVM禁止这样做。为此,您需要在第一次加载之前添加字段。