springboot需要多例对象但Autowire创建为单例问题解决

问题

我使用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);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syf_wfl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值