记录一次@Autowired、@Value自动注入失败
非Spring的Netty项目集成SpringBoot时,自定义的SlaveChannelInitializer 类中@Autowired、@Value标注的属性(都是null)无法从Spring容器和配置文件中获取到值。
经过排查发现自己在使用SlaveChannelInitializer对象时,采用了下面代码段中的方式2,这种非Spring方式,自然不会自动注入@Autowired标注的对象值;采用方式1,调用Spring容器中的对象即可(Spring帮我们注入@Autowired的值)
一次很不应该的错误!!!
@Autowired
private SlaveChannelInitializer slaveChannelInitializer;
…………
try {
bootstrap
.group(eventLoopGroup)
.channel(NioSocketChannel.class)
//方式1.使用@autowired注解的,被Spring管理的对象
.handler(slaveChannelInitializer);
//方式2.使用new XXX()创建对象
.handler(new SlaveChannelInitializer());
……
@Component(value = "slaveChannelInitializer")
public class SlaveChannelInitializer extends ChannelInitializer<SocketChannel> {
/**
* 空闲时间设置
*/
@Value("${netty.idle.READER_IDLE_TIME_SECONDS}")
private int READER_IDLE_TIME_SECONDS;
/**
* 自动注入handler
*/
@Autowired
@Qualifier("slaveHeartHandler")
private SimpleChannelInboundHandler slaveHeartHandler;