2012-01-14 3 views
2

Я новый пользователь весны. Я пытаюсь добиться инъекции зависимостей путем аннотации. Мой beans.xml является: -зависимость Инъекция по аннотациям

<!-- Add your classes base package here -->   
<context:component-scan base-package="com.springaction.chapter01"/> 

<bean id="greeting" class="com.springaction.chapter01.GreetingImpl"> 
    <property name="greeting"> 
     <value>Naveen Jakad</value> 
    </property> 
</bean> 

боба, который я хочу, чтобы ввести это: -

package com.springaction.chapter01; 

import org.springframework.stereotype.Service; 

@Service 
public class InjectBean { 

private int id; 
private String name; 

public InjectBean() { 
    super(); 
} 
//setter getter of above instance variables.. 
} 

и боб, в котором я хочу, чтобы впрыснуть выше боба: -

package com.springaction.chapter01; 

import org.springframework.beans.factory.annotation.Autowired; 

public class GreetingImpl implements Greeting { 

private String greeting; 

@Autowired 
private InjectBean myBean; 

public GreetingImpl() { 
    super(); 
} 
public GreetingImpl(String greeting) { 
    super(); 
    this.greeting = greeting; 
} 

public void setGreeting(String greeting) { 
    this.greeting = greeting; 
} 

@Override 
public void sayGreeting() { 
    System.out.println(greeting + " " + myBean); 
} 
} 

поэтому, когда я тестирую вышеуказанный код: -

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("config.xml")); 
     Greeting greeting = (Greeting)beanFactory.getBean("greeting"); 
     greeting.sayGreeting(); 

Я получаю вывод «Naveen Jakad null», значит, в двух словах я не могу достичь своей цели. Поэтому, пожалуйста, помогите мне и дай мне знать, где я сделать ошибку, которую

ответ

3

, если вы хотите, чтобы ввести на @Autowired вам не нужно сконфигурировать его в XML :)

Вам нужно установить

<mvc:annotation-driven /> 
<context:component-scan base-package="com.your.base.package" /> 

Таким образом, весна будет знать, чтобы проверить наличие аннотаций

0

с решением Fixus вам не нужен файл XML, где вы определяете «приветствие» боб:

Просто добавьте:

@Component // or @Service if it's also a service 
public class GreetingImpl implements Greeting { 

Таким образом, вам не нужно определять ваши компоненты в файле xml.

Если вы используете тест Junit, вы просто вводите класс для проверки (например, «Приветствие») в MyJunitClass и имеете свой контекст в соответствии с определением, основанным на аннотации и компоненте-сканере.

Вы можете видеть, что документ для настройки JUnit тестов: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/testing.html#integration-testing-annotations

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