问题
我使用Autowire时,发现每次创建的handler对象都一样,导致neety报com.cqupt.nettyserver.ServerHandler is not a @Sharable handler, so can't be added or removed multiple times.
错误,我在组件上添加了@Scope("prototype")//不加为单例,因为每次新的连接到来之后都需要分配一个新的对象,所以需改为多例
注解还是不行,因为Spring IOC默认是单例。
解决方案
1、在需要注入的对象上加上@Component注解的同时加上@Scope(“prototype”)注解,使对象创建时按照多例模式创建。
2、创建一个类实现ApplicationContextAware接口,外部传如需要创建对象的类即可。
@Component
public class GetBean implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(GetBean.applicationContext == null) {
GetBean.applicationContext = applicationContext;
}
}
public static <T> T getBean(Class<T> clazz){
return applicationContext.getBean(clazz);
}
}