我正在使用Alfresco Process Services,并为 TaskListeners 和 Delegations 等自定义逻辑创建了一个Spring Boot项目。我正在从该Maven项目中创建 jar 文件,并将其复制到 webapps / activiti-app / WEB-INF / lib 文件夹中。
我有一个简单的 TaskListener ,如下所示,它在Task启动时被调用。但是 @Autowired 变量始终为 null 。
package com.activiti.extension.bean;
@Component("myTaskListener")
public class MyTaskListener implements TaskListener {
@Autowired
UserService userService;
@Override
public void notify(DelegateTask task) {
logger.info("userService: " +userService); // Always prints null
}
答案 0 :(得分:1)
这是因为您的MyTaskListener
被注释为@Component,或者至少在初始化期间被spring忽略了。对于自动装配功能,spring要求在提供的@ComponentScan程序包下使用此批注(或与此类似的注解),以将该类视为Bean,否则将其视为普通的Java类,因此@autowired
在您的情况。
答案 1 :(得分:1)
最后,我能够使其工作。我将任务侦听器的完整包名称放在Task属性的class字段中。现在,我将像$ {myTaskListener}这样的Delegate表达式放上去,它就起作用了……
感谢大家的时间和帮助
答案 2 :(得分:0)
下面的代码对我有用
❯ ./_passwd
test_user 19167 0.0 0.0 19988 3184 pts/5 S+ 13:06 0:00 /bin/bash ./_passwd
test_user 19169 0.0 0.0 21532 1016 pts/5 S+ 13:06 0:00 grep _passwd
./_passwd: line 3: _passwd: Permission denied
答案 3 :(得分:0)
还有另外一种使用 Alfresco Spring Application上下文进入自定义服务“ UserService”的方法。
首次访问ServiceRegistry(用于访问Alfresco服务以及其他任何自定义服务的注册表):
ServiceRegistry serviceRegistry = (ServiceRegistry) Context.getProcessEngineConfiguration().getBeans().get(ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY);
然后获取自定义服务UserService:
QName qname = QName.createQName("UserService");
UserService userService = (UserService) serviceRegistry.getService(qname);