我这里的整合其实就是为了能在handler类里使用@Autowired注入业务service。
参考
这个例子整合的思路就是把ServerBootstrap等一些需要new的,使用@Configuration+@Bean来替代。
悲惨的是,整合完了,我却有了新的疑惑,基础不行啊我。贴出部分代码,
我的疑惑就是下面这段代码中使用构造函数,来注入了WSServerInitialzer这个类,构造函数上也没有使用@Autowired注解,为啥没问题呢???查了半天,有说是因为从Spring4.3开始,如果类仅有一个构造函数,可以不写@Autowired。而且spring官方推荐使用@Autowired在构造函数上
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(NettyProperties.class)
public class NettyConfig {
private final NettyProperties nettyProperties;
private final WSServerInitialzer serverInitialzer;
@Bean
public ServerBootstrap serverBootstrap() {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup(),workerGroup())
.channel(NioServerSocketChannel.class)
/**
* ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,
* 函数listen(int socketfd,int backlog)用来初始化服务端可连接队列,
* 服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,
* 多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog参数指定了队列的大小
*/
.option(ChannelOption.SO_BACKLOG, nettyProperties.getBacklog())
.handler(new LoggingHandler(LogLevel.DEBUG)) //日志
.childHandler(serverInitialzer); // 自定义handler
return b;
}