public class NettyServerHandler extends SimpleChannelInboundHandler<Message> { }
我在这个类中使用@autoWired注入 redsMananger,经过debug后发现注入为空,在其他类中却可以正常注入。
我的redisManager代码如下:
@Component public class redisManager { private static RedissonClient redissonClient; @Autowired private SingleClientStrategy singleClientStrategy; public void init(){ redissonClient = singleClientStrategy.getRedissonClient(); } public static RedissonClient getRedissonClient(){ return redissonClient; } }
经过一番查询,可以在NettyServerHandler类中直接使用redisManager的静态方法 getRedissionclient()来获得redissionClient. 而redisManager的init方法我直接在start 类中正常注入redisManager,然后在start类中使用@PostConstruct来,使start类注入redisManager类便运行init方法。 start类如下:
@Component //@EnableAspectJAutoProxy public class tcpStart { @Autowired private LimServer limServer; @Autowired private LimWebSocketServer limWebSocketServer; @Autowired public org.lld.tcp.redis.redisManager redisManager; @PostConstruct public void start(){ // @PostConstruct 注解是一个生命周期回调方法,用于在依赖注入完成后执行初始化操作。 // 在容器管理的组件中,当对象实例化并完成依赖注入后,容器会自动调用被 @PostConstruct 注解标记的方法。 limServer.start(); limWebSocketServer.start(); limServer.testAop(); String getAroundResult = limServer.testAopAround(); System.out.println(getAroundResult); // limServer.testAopException(); redisManager.init();// 初始化redis } }
在上面说的NettyServerHandler类中使用直接使用redisManager类的静态方法获取初始化后的redissionClient.
public class NettyServerHandler extends SimpleChannelInboundHandler<Message> {
RedissonClient redissonClient = redisManager.getRedissonClient();
}
测试后,可以获得正常初始化后的redisssionClient.