【问题标题】:Spring AnnotationConfigApplicationContext.scan() is scanning wrong packageSpring AnnotationConfigApplicationContext.scan() 正在扫描错误的包
【发布时间】:2015-02-13 10:06:38
【问题描述】:

我的一个类(MyClass.java)在某个包(packageC)中使用了导致以下错误的注释:

NoSuchBeanDefinitionException: No qualifying bean of type [com.foo.SomeAnnotation] is defined

使用的注释来自第 3 方库 (com.foo)

我没有使用 XML 来配置 Spring。我所做的是,在我的应用程序设置过程中,我创建了一个 AnnotationConfigApplicationContext 对象,我用它来扫描包以查找带注释的类,然后从这些类中创建 bean。

应用初始化器:

...

final private AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();

public void initApp() {
    //packageC is not scanned
    ctx.scan("packageA", "packageB");
    ctx.refresh();
}

// Called by the application when a bean is required
public <A> A getBeanForClass(Class<A> clazz) {
    return ctx.getBean(clazz);
}

...

由于我知道来自第 3 方库的注释不能由 Spring 管理(相反,Spring 无法从该库创建 bean)我已从扫描中排除了包含使用第 3 方注释的类的我的包:

packageC.MyClass

package packageC

import com.foo.Annotation

public class MyClass {

     ...

     @Annotation
     public void someMethod() {
          ...
     }
}

我的问题是,如果我没有告诉 Spring 从“packageC”中的注释类创建 bean,为什么会出现错误???

我必须补充一点,someMethod() 使用了被扫描包中的类中的对象。

我可能太含糊了,但我想关注AnnotationConfigApplicationContextscan 行为,而不是试图开始讨论实现细节。

无论如何,这里是我的申请的一些细节:

  1. 应用程序使用 Play!框架 (v2.3.8)
  2. Spring 初始化在 Global 对象中完成(根据 Play-Spring-Jpa 教程)
  3. “有问题”的第三个库是 Deadbolt(带有 @Restrict 注释)

感谢您给我的任何澄清:)

编辑:

我在play-framework google group 上发现了一个相关问题。请注意,这家伙实际上是在扫描带有注释类的包......我不是。

【问题讨论】:

  • 您找到解决方案了吗?
  • @biniam_Ethiopia No :(

标签: java spring dependency-injection playframework-2.0 spring-annotations


【解决方案1】:

您应该添加注释,例如@Component@Configuration@Service

[com.foo.SomeAnnotation]类的头部,让spring上下文知道它。

是春豆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多