解决 SpringMvc 非controller类使用@Autowired注解 service注入为null的问题

本文介绍在使用SpringMVC框架开发时,工具类、静态非controller类调用spring管理的service层遇到的问题。使用@Autowired注解注入Service会报null异常,new实例化引入对象也有问题。给出在配置文件中加入扫描配置、改造工具类的解决办法,还记录了其他未测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自:
https://blog.youkuaiyun.com/w_wensan/article/details/79238169
https://blog.youkuaiyun.com/songsongmianbao/article/details/60956129


使用SpringMVC框架,在开发的过程中有一些工具类、静态非controller类需要调用由spring管理的service层。但是使用@Autowired注解注入Service,会报null异常,通过new在工具类中实例化引入对象时,虽然当前引入对象不再报空指针,但是与引入对象关联的其他对象仍然会报null异常,为此在网上查到如下解决办法:

1、在配置文件(springmvc.xml)中加入工具类所在包的扫描配置。

2、改造工具类,代码如下:

@Component  // 这里需将工具类声明为spring组件,这个必须不能忘
public class TestUtils {
    @Autowired
    private ItemService itemService;

    @Autowired
    // private ItemMapper itemMapper;

    // 静态初使化当前类
    private static TestUtils testUtils;

    // 在方法上加上注解@PostConstruct,这样方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。
    @PostConstruct
    public void init() {
        testUtils = this;
    }

    // utils工具类中使用service或mapper接口的方法例子,用"testUtils.xxx.方法" 就可以了
    public static void test(Item record) {
        // 调用service的方法
        testUtils.itemService.insert(record);
    }
}

好了,以上就是我的改造过程~我在自己的项目中测试通过了。

还有一些其他的方法,这边也记录下,不过没有测试。觉得不太符合springmvc的使用习惯啊:
//applicationContext-service.xml为声明service的配置文件名
ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext-service.xml”);
//”userService”为配置文件中定义的service的ID,
UserService uService = (UserService) ac.getBean(“userService”);

第二种写法会重新读取配置文件,不建议使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值