2014-01-04 5 views
-2

Я пытаюсь играть с примером, показанным здесь:Spring и автоматического связывания инъекции зависимостей с использованием конфигурации Java

http://projects.spring.io/spring-framework/

В этом примере один класс имеет компонент аннотацию и переменную-член с Autowired аннотаций. Элемент с автоподключением класса имеет тот же тип, что и Bean в классе @Configuration, также представленном в этом примере.

Этот пример кода выполняет вызов getBean в классе Component и выполняет вызов. Работает и работает автоматическая проводка. Это заставляет меня думать, что оба класса загружаются как бобы, управляемые весенним контейнером, хотя один класс не отмечен как bean-компонент.

Однако, когда я попытался немного более сложный пример использования этого же шаблон я получаю исключение: пружинный

org.springframework.beans.factory.NoSuchBeanDefinitionException

Похоже, что класс должен быть помечены как bean, чтобы получить управление весной, но представленный пример кажется другим.

Мой код, перечисленные здесь (имена изменены):

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

Почему вы не вставляете свой код и полную трассировку стека исключения? –

ответ

2

Недостаточно, чтобы его аннотировали с помощью @Component. Аннотированный класс должен быть в пакете, который проверяется компонентом.

Обратите внимание, как @Configuration класс в примере имеет

@ComponentScan 

это сделает его сканировать пакет класса он аннотирования. Вы можете указать атрибут в аннотацию

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

, чтобы он просканирует для компонентов в том, что (те) указанного пакета (ов).

Смежные вопросы