2010-07-19 6 views
1

Я пытаюсь проверить Spring Annotations, чтобы увидеть, как они работают с некоторыми простыми примерами, полученными из Spring 3.0 Source (в данном случае аннотация «@Required»).Spring @Required аннотация не работает должным образом

Для начала я придумал пример типа «Hello World», который не использует аннотации. Это работает как ожидалось (т. Е. Печатает «Hello Spring 3.0 ~!»).

Затем я добавил поле объекта DAO в класс Spring3HelloWorld. Мое намерение состояло в том, чтобы умышленно вызвать исключение, аннотируя установщик для DAO с @Required, но затем не устанавливая его. Тем не менее, я получаю исключение нулевого указателя (поскольку this.dao имеет значение NULL), когда я ожидал исключения на основе несоблюдения «правил/требований» аннотации.

Я думал, что мне нужно было установить объект DAO перед вызовом любого метода из Spring3HelloWorld, но, видимо, это не тот случай. Я предполагаю, что не понимаю, как работает @Required.

Итак, в основном, как бы я получил следующее сообщение, чтобы дать мне ошибку в строке «Эй, вы не можете этого сделать, вы забыли установить DAO blah blah blah».

Spring3HelloWorldTest.java:

import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.ClassPathResource; 

public class Spring3HelloWorldTest { 

    public static void main(String[] args) { 

     XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource  ("SpringHelloWorld.xml")); 

     Spring3HelloWorld myBean = (Spring3HelloWorld) beanFactory.getBean("spring3HelloWorldBean"); 
     myBean.sayHello();   

    } 
} 

Spring3HelloWorld.java:

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

public class Spring3HelloWorld { 

    private DAO dao; 

    @Required 
    public void setDAO(DAO dao){ 
     this.dao = dao; 
    } 

    public void sayHello(){ 
     System.out.println("Hello Spring 3.0~!"); 

     //public field just for testing 
     this.dao.word = "BANANA!!!"; 
    } 
} 

SpringHelloWorld.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:annotation-config/> 

    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> 

    <bean id="dao" class="src.DAO" ></bean> 
    <bean id="spring3HelloWorldBean" class="src.Spring3HelloWorld" ></bean> 

</beans> 

ответ

3

Моя первая догадка вы не получите какой-либо из передовых поведение с Spring и аннотациями, потому что вы используете XmlBeanFactory вместо r Рекомендовано ApplicationContext.

- редактировать -

Угу - посмотреть переполнения стека question/answer.

+0

А я не знал об этом. Спасибо, я обязательно попробую с ApplicationContext. – FromCanada

+0

Еще раз спасибо. Я тестировал оба метода, и каждый из них работал. – FromCanada

+0

+1 хорошее место ... – skaffman

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