【问题标题】:Spring autowiring and dependency injection using Java configuration [closed]使用Java配置的Spring自动装配和依赖注入[关闭]
【发布时间】: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()
    {   }
}

【问题讨论】:

  • 为什么不粘贴代码以及异常的完整堆栈跟踪?

标签: java spring


【解决方案1】:

@Component 注释是不够的。带注释的类必须在组件扫描的包中。

请注意示例中的@Configuration 类的作用

@ComponentScan

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2011-12-26
    • 2013-05-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多