2015-02-23 3 views
1

Я новичок с Spring Framework, и я попытался следующий пример:@Resource весной не работает?

Сначала я создал два очень простых классов

public class ObjectA { 

    @Override 
    public String toString() { 
     return "I am ObjectA"; 
    } 
} 

public class ObjectB { 
    @Override 
    public String toString() { 
     return "I am ObjectB"; 
    } 
} 

Нет Я хочу использовать этот классы, управляемые Spring. Итак, я создал еще один класс, который использует аннотацию @Resource (javax.annotation.Resource) для подключения двух объектов.

public class MyApp { 

    @Resource 
    public ObjectA oa; 

    @Resource 
    public ObjectB ob; 

    public void info() { 
     System.out.println("--------------"); 
     System.out.println(oa); 
     System.out.println("--------------"); 
     System.out.println(ob); 
     System.out.println("--------------"); 

    } 

    public static void main(String[] args) { 
     ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mySpringConfig.xml"); 
     System.out.println(applicationContext.getBean(ObjectA.class)); 
     System.out.println(applicationContext.getBean(ObjectB.class)); 
     MyApp myApp = applicationContext.getBean(MyApp.class); 
     myApp.info(); 
    } 

} 

mySpringConfig.xml содержит это:

[..] 
<bean id="objectA" class="com.mySpringCompany.ObjectA" /> 
<bean id="objectb" class="com.mySpringCompany.ObjectB" /> 
<bean id="myApp" class="com.mySpringCompany.MyApp" /> 
[..] 

Теперь, когда я бегу Main-Метод MyApp я получаю следующее:

I am ObjectA 
I am ObjectB 
-------------- 
null 
-------------- 
null 
-------------- 

Так что, когда я непосредственно использовать ApplicationContext. getBean (ObjectA.class) в основном методе Я получаю экземпляр ObjectA. Когда я хочу попасть в объект MyApp, он не работает. Но я думаю, что Spring должен был ввести два объекта в класс MyApp. Что я сделал неправильно? Заранее благодарим за любую помощь.

+1

ли вы пишете в вашем XML, какой пакет для сканирования? '' –

+0

, и я думаю, что в классе вы должны использовать '@ Autowired' вместо' @ Resource' –

ответ

1

Вы хорошо определили все 3 компонента в XML.

Но вам также нужно активировать конфигурации через аннотации, иначе нечего толковать @Resource. Весна делает это только в том случае, если вы это наставляете.

Этот Bean Post Processor ручек @Resource.

Вы можете просто определить его как фасоль:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 

Или вы можете использовать это:

<context:annotation-config> 
+0

Спасибо, Кристиан. В этом был смысл ;-) – SpringNewbie