繁体   English   中英

从类外部的jar文件中自动连接类

[英]Autowired class from the jar file outside the classes

jar文件中的Class如何通过<context:component-scan base-package="" /> 我的自动接线课程出现以下错误。

SEVERE [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.quartz.Scheduler com.path.controller.MyController.scheduler; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.quartz.Scheduler] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

码:

package com.path.controller;
import org.quartz.Scheduler;

@Controller
public class MyController{

   @Autowired
   Scheduler scheduler;
}

该调度程序位于jar文件quartz-oracle-2.1.6.jar ,位于WEB-INF\\lib lib位于部署软件包的classes文件夹之外。 applicationcontext.xml我有以下条目,

<context:component-scan base-package="com.path" />

使用eclipse中的导出实用程序导出jar文件时,有一个选项称为添加目录项。 选中此选项并导出jar文件,这将解决问题

我猜您尚未定义调度程序bean。 您需要先定义bean才能注入到控制器中。

applicationcontext.xml首先定义一个Scheduler类型的bean。 您可能需要类似下面的内容。 确保检查石英文档,以检查所需的调度程序以及如何实例化它。

<bean id="schedulerFactory" 
    class="org.quartz.StdSchedulerFactory" />

<bean id="scheduler" class="org.quartz.Scheduler"  factory-bean="schedulerFactory" factory-method="getDefaultScheduler" />

由于该异常抱怨“没有[org.quartz.Scheduler]类型的合格bean”,我们将不得不定义org.quartz.Scheduler类型的bean,但是,如果没有任何相同的具体实现,这是不可能的。将必须从Factory类org.quartz.impl.StdSchedulerFactory中获得一个具体的实现,它是一个非静态方法getScheduler()。

因此,您将必须在上下文xml文件中添加以下两行,并且它将起作用,我已经使用与您使用的相同版本的spring进行了验证:

<bean id="schedulerFactory"   class="org.quartz.impl.StdSchedulerFactory" />    

<bean id="scheduler" class="org.quartz.Scheduler"  factory-bean="schedulerFactory" factory-method="getScheduler" />

在打印初始化的bean之后,控制台输出显示以下内容:

  scheduler=org.quartz.impl.StdScheduler@536aaa8d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM