SpringBoot 中@Autowired 注入失效原因及解决方法

项目场景:

项目使用SpringBoot框架开发,由于项目需要进行主动控制前端页面,项目中加入了Netty框架+WebSocket


问题描述:

代码中有个属性成员使用了@Autowired进行自动注入。发现一直无法注入进去:
示例代码如下:

public class WebSocketURIHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {

    @Autowired
    private NettyProperties nettyProperties;


	xxxxxxx..........................
}

debug结果如下:

debug


原因分析:

这里是因为这个类本身是被 new 的方式产生的,自动注入会失效。

完整概述:

若类A中包含成员属性B,B是通过@Autowired自动注入,而类A的实例是通过new的方式产生的,则自动注入会失效的。
用new的话,默认调用的是构造方法, 但是Autowired所注入的对应并没有被初始化。都是要Autowired注入的话,项目一启动就纳入spring容器的管理。


解决方案:

成员属性在类初始化的时候,进行赋值。

示例代码:

public class WebSocketURIHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
  	private NettyProperties nettyProperties;

    public WebSocketURIHandler(){
        nettyProperties = (NettyProperties) SpringContextUtil.getBean("nettyProperties");
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是基于Spring Framework的,其最重要的一个概念就是IOC(Inversion of Control,控制反转)和依赖注入(Dependency Injection,DI)。 IOC是一种设计模式,它的核心思想是将对象的创建和对象之间的依赖关系的维护交给一个容器来管理,而不是由应用程序自己去管理。在Spring BootIOC容器负责管理应用程序的对象,应用程序只需要定义对象的类型和依赖关系,容器就可以自动创建和管理这些对象,从而减少了应用程序的耦合度和代码的复杂度。 依赖注入IOC的一种实现方式,它通过将对象的依赖关系注入到对象,来解决对象之间的依赖关系问题。在Spring Boot,依赖注入可以通过构造函数注入、Setter方法注入、注解注入等方式实现。 构造函数注入是通过在对象的构造函数定义依赖关系的方式实现的,Spring Boot会自动调用构造函数来创建对象,并将依赖关系注入到对象。 Setter方法注入是通过在对象的Setter方法定义依赖关系的方式实现的,Spring Boot会自动调用Setter方法来设置对象的依赖关系。 注解注入是通过在对象的属性或方法上添加注解的方式实现的,Spring Boot会自动扫描应用程序的注解,并自动将依赖关系注入到对象。 总之,IOC和依赖注入Spring Boot的核心思想,它们可以帮助我们更加高效地管理和维护应用程序的对象和依赖关系,从而提高应用程序的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值