我正在尝试测试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>
答案 0 :(得分:3)
我的第一个猜测是,您将不会获得Spring和注释的任何高级行为,因为您使用的是XmlBeanFactory
而不是推荐的ApplicationContext
。
- 编辑 -
是的 - 请参阅此Stack Overflow question/answer。