使用Java配置进行Spring自动装配和依赖注入

时间:2014-01-04 18:49:45

标签: java spring

我正在尝试使用此处显示的示例:

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()
    {   }
}

1 个答案:

答案 0 :(得分:2)

仅使用@Component进行注释是不够的。带注释的类必须位于已扫描组件的包中。

注意示例中的@Configuration类有

@ComponentScan

这将使它扫描它正在注释的类的包。您可以为注释提供属性

@ComponentScan(basePackages = "com.you.some")

让它扫描那些(那些)指定包中的组件。