在昨天的项目中我们可能会遇到这个问题

 下面代码中的Service的值是null,这是为什么呢

import cn.itsource.crm.service.ICustomerService;
@Component //组件 可以把这放到spring容器中
public  class CustomerTaskListener  implements TaskListener{
	@Autowired
	ICustomerService customerService;//
	@Override
	public void notify(DelegateTask delegateTask) {
		System.out.println(customerService);
		// 上一个任务指定人是谁    当前登录人-超级管理员
		String user =delegateTask.getVariable("user",String.class);
		// 设置下一个任务指定人   user 数据库查找的领导  
		String assignee="超级管理员";
		delegateTask.setAssignee(assignee);
		// 设置当前人
		delegateTask.setVariable("user", assignee);
	}

}

 这就要了解一下spring的底层原理了,SpringIOC/AOP,Spring容器框架中会有Controller,service,Repository,Component这四个空间,当要注入哪一个层的实体类的时候,就会去哪一层找,这样提高了效率,找到了就把对象注给你,没找到就报错,同时他也是一个懒加载对象,只会new一次,在注入这个service的时候是Activiti帮我们创建的不是spring给我们创建的所有就会有null值 

                                                               Spring注入原理

 

解决方式就是不让Activiti帮我们创建,把我们的对象交给Spring来管理,在Activiti设置我们注入的实体类

 

 

喜欢的朋友点个赞把!!!!!!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐