MENU

Java静态方法调用@Autowired/@Resource注入的对象

概述

项目中一个工具类需要调用UserService中的业务,但静态方法中不能调用非静态方法,否则编译不通过;而给被注入的对象添加static关键字会导致无法注入,值为null

问题源码

public class TestUtils {

    @Resource
    private UserService userService;

    public static void testMethod(Integer userId) {
        // 编译不通过
        userService.deleteByUserId(userId);
    }
}
public class TestUtils {

    // 编译通过但userService值为null
    @Resource
    private static UserService userService;

    public static void testMethod(Integer userId) {
        userService.deleteByUserId(userId);
    }
}

解决方案

使用Java关键字@PostConstruct进行初始化
具体步骤如下:

  1. 将该类交给Spring容器管理
  2. 注入对象
  3. 声明一个类自身的静态成员变量
  4. 初始化静态成员变量
  5. 调用该成员变量

代码如下:

// @Component注解务必要添加
@Component
public class TestUtils {
    // 正常注入Service
    @Resource
    private UserService userService;
    
    // 声明类自身的静态成员变量
    public static TestUtils testUtils;

    // 初始化静态成员变量
    @PostConstruct
    public void init(){
        testUtils = this;
        testUtils.userService = this.userService;
    }

    public static void testMethod(Integer userId) {
        // 调用该成员变量中的
        testUtils.userService.deleteByUserId(userId);
    }
}

文章标题:Java静态方法调用@Autowired/@Resource注入的对象
如果文中内容侵犯了您的权益,请及时与博主取得联系进行删除!
本站文章未经许可禁止转载,本文地址:https://blog.wanvale.com/archives/437/

Archives QR Code Tip
QR Code for this page
Tipping QR Code