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

时间:2015-02-13 10:06:39

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

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

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

使用的注释来自第三方库(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);
}

...

因为我知道第三方库的注释不能由Spring管理(相反,Spring不能从该库创建bean)我从扫描中排除了包含类的类包使用第三方注释:< / p>

packageC.MyClass

package packageC

import com.foo.Annotation

public class MyClass {

     ...

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

我的问题是,如果我没有告诉Spring从“packageC”中的带注释的类创建bean,我会收到错误???

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

我可能过于含糊,但我想关注scan AnnotationConfigApplicationContext的行为,而不是试图开始讨论实施细节。

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

  1. 该应用程序使用Play!框架(v2.3.8)
  2. Spring初始化在Global对象中完成(根据Play-Spring-Jpa教程)
  3. '冒犯'第三个库是Deadbolt(带有@Restrict注释)
  4. 感谢您给我的任何澄清:)

    编辑:

    我在play-framework google group找到了相关问题。请注意,那家伙实际上是用带注释的类扫描包裹......我不是。

1 个答案:

答案 0 :(得分:0)

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

[com.foo.SomeAnnotation]类的开头

使spring上下文知道它。

是一种四季豆。