【发布时间】:2014-01-04 18:49:45
【问题描述】:
我正在尝试使用此处显示的示例:
http://projects.spring.io/spring-framework/
在这个例子中,一个类有一个 Component 注释和一个带有 Autowired 注释的成员变量。该类的自动连接成员与此示例中也提供的 @Configuration 类中的 Bean 具有相同的类型。
此示例代码对 Component 类执行 getBean 调用并进行调用。自动接线工作并运行。这让我相信这两个类都是作为由 spring 容器管理的 bean 加载的,即使一个类没有被标记为 bean。
但是,当我使用相同的模式尝试一个稍微复杂一点的示例时,我得到了一个 spring 异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException
似乎必须将一个类标记为 bean 才能由 spring 管理,但提供的示例似乎另有说明。
我的代码在此处列出(名称已更改):
Config.java
package com.mydomain.config;
@Configuration
@ComponentScan
public class Config {
@Bean
A getAClass()
{
return new AImpl();
}
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(Config.class);
B b = context.getBean(B.class);
B.process();
}
}
B.java
package com.mydomain.component;
@Component
public class B{
@Autowired
private A a;
public void process()
{
return a.process();
}
A.java
package com.mydomain.component;
public interface A {
void process();
}
AImpl.java
package com.mydomain.component;
public class AImpl implements A {
void process()
{ }
}
【问题讨论】:
-
为什么不粘贴代码以及异常的完整堆栈跟踪?