我正在尝试使用此处显示的示例:
http://projects.spring.io/spring-framework/
在此示例中,一个类具有Component注释和具有Autowired注释的成员变量。该类的自动连接成员与此示例中提供的@Configuration类中的Bean具有相同的类型。
此示例代码对Component类执行getBean调用并进行调用。自动布线工作和运行。这让我相信这两个类都是由spring容器管理的bean加载的,即使一个类没有标记为bean。
然而,当我尝试使用相同模式的稍微复杂的例子时,我得到一个春天例外:
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()
{ }
}
答案 0 :(得分:2)
仅使用@Component
进行注释是不够的。带注释的类必须位于已扫描组件的包中。
注意示例中的@Configuration
类有
@ComponentScan
这将使它扫描它正在注释的类的包。您可以为注释提供属性
@ComponentScan(basePackages = "com.you.some")
让它扫描那些(那些)指定包中的组件。