我读到了关于自动装配概念并试图在我的项目中使用它。我想要的只是为特定类创建一个实例,并且可以与所有具有自动装配的类一起使用。
我在 dispatcher-servlet.xml
中定义了一个bean<bean id="modifyService"
class="com.xyz.service.ModifyPreferencesService"/>
没有定义范围,因此它将是单例。 现在我在两个班级中使用它。
class ABCEvaluationService{
@Autowired
ArrayList listIncident;
//This class is instantiating IncidentFactory with new keyword in a method
**//Methods using listIncident - getting empty list here**
}
class IncidentFactory{
**@Autowired
List listIncident
@Autowired
ModifyPreferencesService modifyService;**
//This class creates Incident Objects and add it to the listIncident.
**//Uses modifyService class objects - but I am getting null here**
}
问题是我能够在头等舱中使用它但在第二个类中它给了我NullPointerException。 同样的事情发生在其他bean上。我在做什么这个错了。这不是自动装配的目的吗?请解释..我正在学习春天,并且不想学习错误的概念。
完整的dispatcher-servlet.xml是(我真的不能复制粘贴..所以可能会出现语法错误。如果有的话请忽略):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<context:component-scan base-package="mypack" />
<mvc:annotation-driven/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/ABCReportForm"/>
<bean class="com.xyz.interceptor.ValueStreamInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<mvc:default-servlet-handler/>
<mvc:resources location="/resources/" mapping="/resources/**"/>
<bean id="validator"
class="com.xyz.validator.ABCValidator"/>
<bean id="modifyService"
class="com.xyz.service.ModifyPreferencesService"/>
<bean id="abcService"
class="com.xyz.service.ABCEvaluationService"/>
<bean id="listIncident"
class="java.utilArrayList"/>
//Code for InternalResourceViewer
</beans>
由于
答案 0 :(得分:0)
Spring对集合对象进行了古怪的处理。它假定您要求许多bean都实现一些通用接口。自动装配集合需要使用其名称。
此外: - 使用泛型。 - 使用Spring Boot而不是手动配置(使用过时的版本)。 - 使用构造函数注入而不是字段注入来使代码更易于测试和维护。