遇到得一个关于spring boot 注入的问题

今天在开发的时候遇到一个问题,在工作流监听中用@Autowired 注入service的时候注入的是一个空
开始以为是漏写了没有把这个service扫描到后来发现并不是:
如果我们要在我们自己封装的Utils工具类中或者非controller普通类中使用@Autowired注解注入Service或者Mapper接口,直接注入是不可能的,因为Utils使用了静态的方法具体的修改方式如下

@Component
public class FlowTaskListener  implements ExecutionListener{
    @Autowired
    private FlowTodoService flowTodoService;
    public static FlowTaskListener flowTaskListener;
    
    public FlowTaskListener() {
        
    }
    @PostConstruct
    public void init() {
        flowTaskListener = this;
        flowTaskListener.flowTodoService = this.flowTodoService;
    }

    @Override
    public void notify(DelegateExecution execution) throws Exception {
        String businessKey = execution.getProcessBusinessKey();
        if (!StringUtils.isEmpty(businessKey)) {
            flowTaskListener.flowTodoService.endFlow(businessKey);
        }
    }

}

其中有3点是必须的首先 给类加上@Component
其次 被注入的类药写为public
第三用@PostConstruct 进行赋值
那么研究下@PostConstruct标签

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

你可能感兴趣的:(遇到得一个关于spring boot 注入的问题)