Spring AnnotationConfigApplicationContext.scan() 正在扫描错误的包

Spring AnnotationConfigApplicationContext.scan() is scanning wrong package

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

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

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

我没有使用 XML 配置 Spring。我所做的是,在我的应用程序设置期间,我创建了一个 AnnotationConfigApplicationContext 对象,我用它来扫描包中带注释的 classes,然后从该 classes 创建 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)我已经从扫描中排除了我的包其中包含 classes 使用第 3 方注释:

packageC.MyClass

package packageC

import com.foo.Annotation

public class MyClass {

     ...

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

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

我必须补充一点,someMethod() 在扫描的包裹中使用了 class 中的一个对象。

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

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

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

感谢您给我的任何说明:)

编辑:

我在 play-framework google group 上发现了一个相关问题。请注意,那里的人实际上正在扫描带有注释 classes 的包裹……我不是。

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

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

是一个 spring bean。