Spring @Required注释没有按预期工作

时间:2010-07-19 20:35:17

标签: java spring

我正在尝试测试Spring Annotations,看看它们是如何使用从Spring 3.0 Source派生的一些简单示例(在本例中是“@Required”注释)。

首先,我提出了一个不使用任何注释的基本“Hello World”类型示例。这按预期工作(即打印“Hello Spring 3.0~!”)。

然后我将DAO对象字段添加到Spring3HelloWorld类。我的意图是通过使用DAO注释@Required的setter而不是设置它来故意导致异常发生。但是,当我期望基于不遵循注释“rules / requirements”的异常时,我得到一个空指针异常(因为this.dao为null)。

我认为在调用来自DAO的任何方法之前我需要设置Spring3HelloWorld对象,但显然情况并非如此。我认为我误解了@Required的工作原理。

所以基本上我怎么能得到以下内容给我一个错误:“嘿,你不能那样做,你忘了设置DAO等等等等。”

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>

1 个答案:

答案 0 :(得分:3)

我的第一个猜测是,您将不会获得Spring和注释的任何高级行为,因为您使用的是XmlBeanFactory而不是推荐的ApplicationContext

- 编辑 -

是的 - 请参阅此Stack Overflow question/answer