Netty的ChannelHandler不是Spring bean,因为它们是由Netty框架管理而不是Spring IoC容器管理的。ChannelHandler的生命周期由Netty管理,它是在Netty框架中创建、初始化和管理的。另一方面,Spring bean由Spring IoC容器管理,它们的生命周期由Spring框架管理。所以可以手动从Spring应用程序上下文检索bean,并在ChannelHandler中使用它。通过使用ApplicationContextAware接口并使用()方法检索Bean来实现。
package ;
import ;
import ;
import ;
import ;
import ;
/**
* @Auther: ArimaKisho
* @Date: 2018/12/3 17:46
* @Description:
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
/**
* 获取spring容器,以访问容器中定义的其他bean
*/
private static ApplicationContext context;
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param context
*/
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
= context;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return context;
}
/**
* 获取对象
* 这里重写了bean方法,起主要作用
* @param beanName
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static<T> T getBean(String beanName) throws BeansException{
return (T) (beanName);
}
public static void destroy() {
context= null;
}
public static String getMessage(String key) {
return (key, null, ());
}
}