0

我有一个在 liferay 6.1.2 中运行的预定作业,需要弹簧注射。

示例代码 -

import com.liferay.portal.kernel.messaging.Message; 
import com.liferay.portal.kernel.messaging.MessageListener; 
import com.liferay.portal.kernel.messaging.MessageListenerException;    
import java.lang.reflect.InvocationTargetException;


public class ScheduledJob implements MessageListener {      

    @Autowired
    private SomeService service;

    @Override
    public void receive(final Message msg) throws MessageListenerException {    
        try {
            service.someMethod();
        } catch (final IllegalAccessException e) {

        } catch (final InvocationTargetException e) {

        }
    }    
}

注入的服务不是通过应用程序上下文初始化的,并且始终为空。

Auowiring 非常适合其他类。只有 ScheduledJob 失败。

有人知道解决方案吗?

谢谢

4

2 回答 2

0

我自己没有尝试过,但您可以尝试通过 ScheduledJob 类实现 ApplicationContextAware 接口并按照此处所述获取注入的 bean 。

于 2013-08-06T20:45:03.650 回答
0

在另一个包中创建一个类,并在该类中借助构造函数自动装配您的服务,方法是将@component 注释放在类上,将@Autowire 注释放在参数化构造函数上,您将在参数中传递 serviceobject。

在此类中编写一个将使用您的服务的静态方法。将此包名称放在 spring xml 文件中的 componentscan 标记中。

现在在接收方法中,您必须使用类名调用该方法,因为方法是静态的。

于 2016-01-06T17:53:56.753 回答