从类外部的jar文件中自动化的类

时间:2017-06-08 04:27:46

标签: java spring

如何通过<context:component-scan base-package="" />扫描jar文件中的Class。我收到了自动上课时的以下错误。

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" />

3 个答案:

答案 0 :(得分:1)

在eclipse中使用导出实用程序导出jar文件时,会出现一个名为Add directory entries的选项。选中此选项并导出jar文件,这将解决问题

答案 1 :(得分:1)

我猜你没有定义你的调度程序bean。您需要先定义bean才能注入控制器。

applicationcontext.xml首先定义一个类型为Scheduler的bean。 您可能需要以下内容。请务必查看quartz文档以检查您需要哪个调度程序以及如何实例化它。

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

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

答案 2 :(得分:1)

由于异常抱怨“没有[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