Spring @resource注入获得对象为空

用spring开发web,流程是html->js->控制器(注入service)->dao->mybatis
这个流程是跑的没有问题的。
然后我由于需要用到一个任务的框架,所以在中间添加了一个流程:
html->js->控制器(new一个任务类的对象)->任务类(注入service)->dao->mybatis
这样子,就会报注入的service是null
代码应该是没有问题的,因为如果同样的代码带式用流程1,确实可以最后操作到数据库(但是这样就没有任务的功能了)
所以我认为核心是如何正确注入,尝试过给任务类加@Service、@Controller,还有直接new一个service的实现类,但是这样的话service中的dao的注入又是报null。由于dao的实现是mybatis的xml文件,所以无法再用new实现类的方法。上网找了资料,可能描述不够精确都没找到答案。可能实在不行只能写jdbc的方式去完成。
图片补充:

clipboard.png
我在任务类中注入bean

clipboard.png
报错null.

clipboard.png

clipboard.png

我在controller中注入bean,没有问题,能运行。但是这样一来任务(即多少时间跑一次业务带代码)就没有用了

阅读 8.4k
2 个回答
新手上路,请多包涵

Job任务类中使用spring的注解,可以按照下面的步骤:
一:创建类
public class JobFactory extends AdaptableJobFactory{

 @Autowired  
    private AutowireCapableBeanFactory capableBeanFactory;  
  
    @Override  
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {  
        Object jobInstance = super.createJobInstance(bundle);  
        capableBeanFactory.autowireBean(jobInstance);  
        return jobInstance;  
    }

}
二:在要执行的任务类中添加:

@Autowired
private ***ServiceImpl ****ServiceImpl;

private static 任务类名 job;

public 任务类名() {
    job = this;
    job.***ServiceImpl = this.***ServiceImpl;
}

要在任务类中使用注解用这个语句:job.**ServiceImpl.方法();
我这里是用的是静态方法之间的调用,所以用第二步这个方法
三:在配置job的配置文件中:

<bean id="jobDetail2" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="任务类的全类名"></property>
</bean>

<bean id="cornTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="jobDetail2" />
    <property name="cronExpression" value="0 0 2 15 * ?" />
</bean>
<bean id="rsh_simpleTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
    <property name="jobDetail" ref="jobDetail2" />  
    <property name="startDelay" value="500" />  
    <property name="repeatInterval" value="0" />  
    <property name="repeatCount" value="0" />  
</bean> 
<bean id="jobFactory" class="JobFactory的全类名"></bean>
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">  
        <list>  
            <ref bean="cornTrigger" />  
            <ref bean="rsh_simpleTrigger1" />  
        </list>  
    </property> 
    <property name="jobFactory" ref="jobFactory"></property>
</bean>

注:前段时间刚遇到这个问题,我是这样解决的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题