可以为加载类定义新字段

时间:2017-10-30 14:04:14

标签: java redis jedis byte-buddy

我使用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类。

我需要你的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

不可能将字段添加到已加载的类中,JVM禁止这样做。为此,您需要在第一次加载之前添加字段。