【发布时间】: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() 使用了被扫描包中的类中的对象。
我可能太含糊了,但我想关注AnnotationConfigApplicationContext 的scan 行为,而不是试图开始讨论实现细节。
无论如何,这里是我的申请的一些细节:
- 应用程序使用 Play!框架 (v2.3.8)
- Spring 初始化在
Global对象中完成(根据 Play-Spring-Jpa 教程) - “有问题”的第三个库是
Deadbolt(带有@Restrict注释)
感谢您给我的任何澄清:)
编辑:
我在play-framework google group 上发现了一个相关问题。请注意,这家伙实际上是在扫描带有注释类的包......我不是。
【问题讨论】:
-
您找到解决方案了吗?
-
@biniam_Ethiopia No :(
标签: java spring dependency-injection playframework-2.0 spring-annotations