Я пытаюсь проверить 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>
А я не знал об этом. Спасибо, я обязательно попробую с ApplicationContext. – FromCanada
Еще раз спасибо. Я тестировал оба метода, и каждый из них работал. – FromCanada
+1 хорошее место ... – skaffman