Java 当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException
我对春天还很陌生,这让我很困惑。我尝试注入我的DAO实现,它在控制器类中工作,但在另一个类中,当使用完全相同的代码时,我得到NullPointerExceptionJava 当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException,java,spring,jsp,spring-mvc,cewolf,Java,Spring,Jsp,Spring Mvc,Cewolf,我对春天还很陌生,这让我很困惑。我尝试注入我的DAO实现,它在控制器类中工作,但在另一个类中,当使用完全相同的代码时,我得到NullPointerException @Inject private ResultCsvDAO res; . . List<ResultRow> list = res.readResultToObjects(); @Inject 私有结果;私有结果; . . List List=res.readResultToObjects(); 最后一行给出了Null
@Inject
private ResultCsvDAO res;
.
.
List<ResultRow> list = res.readResultToObjects();
@Inject
私有结果;私有结果;
.
.
List List=res.readResultToObjects();
最后一行给出了NullPointerException。
我在Spring配置文件中使用了所有的包
<context:component-scan base-package="ptra.freecharts, ptra.controller, ptra.dao" />
<context:annotation-config />
知道我遗漏了什么或做错了什么吗
编辑。这是全班的
package ptra.freecharts;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import ptra.dao.ResultCsvDAO;
import ptra.model.ResultRow;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
@Service
public class DataProviderXY implements DatasetProducer, Serializable {
private static final long serialVersionUID = 4755020363939818521L;
private final Logger logger = LoggerFactory.getLogger(DataProviderXY.class);
@Inject
private ResultCsvDAO res;
public String getProducerId() {
return "ptra.freecharts.XY";
}
public boolean hasExpired(
Map arg0, Date arg1) {
return false;
}
public Object produceDataset(Map arg0) throws DatasetProduceException {
XYSeries dataset = new XYSeries("XY Dataset");
List<ResultRow> list = res.readResultToObjects();
for (int i=0; i<list.size(); i++) {
dataset.add(i, list.get(i).getElapsed());
}
return new XYSeriesCollection(dataset);
}
}
package ptra.freecharts;
导入java.io.Serializable;
导入java.util.Date;
导入java.util.List;
导入java.util.Map;
导入javax.inject.inject;
导入org.jfree.data.xy.XYSeries;
导入org.jfree.data.xy.XYSeriesCollection;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.stereotype.Service;
导入ptra.dao.resultsvdao;
导入ptra.model.ResultRow;
导入de.laures.cewolf.DatasetProduceException;
导入de.laures.cewolf.DatasetProducer;
@服务
公共类DataProviderXY实现DatasetProducer,可序列化{
私有静态最终长serialVersionUID=4755020363939818521L;
专用最终记录器Logger=LoggerFactory.getLogger(DataProviderXY.class);
@注入
私有结果;私有结果;
公共字符串getProducerId(){
返回“ptra.freecharts.XY”;
}
公共布尔值已过期(
地图arg0,日期arg1){
返回false;
}
公共对象produceDataset(映射arg0)引发DatasetProduceException{
XYSeries数据集=新的XYSeries(“XY数据集”);
List List=res.readResultToObjects();
对于(int i=0;i您的@Inject
注释来自哪个包
Spring通常使用@Autowired
,这是Spring框架API的一部分。另外@javax.annotation.Resource
由Spring框架处理
@javax.inject.inject
仅在Spring 3中受支持。您使用的是哪个版本的Spring
如果您使用的是Spring 3,则必须在Spring容器中定义类型为resultsvdao
的bean。这可以在XML Spring配置文件中执行,也可以使用注释执行,例如@Component
另外,您尝试注入的这个bean是Spring管理的bean吗?控制反转和依赖注入是Spring的核心功能。它保证只有当链中的所有bean都由Spring管理时,依赖bean才会自动注入和实例化
为了回答您的具体问题,您正在注入resultsvdao res;
的类完全不是由Spring管理的
当我说由Spring管理时,它意味着它必须由Spring实例化,Spring必须有关于这个类的信息
如果这仍然对您没有帮助,那么我相信您可以粘贴完整的类,我将能够解决您的问题。此元素
<jsp:useBean id="dataXY" class="ptra.freecharts.DataProviderXY" />
与Spring完全无关。Servlet容器(jsp标记库)正在创建一个DataProviderXY
类的实例并使用它。如果Spring没有机会处理它,它就不能注入任何东西
如果您使用的是Spring MVC,请让上下文直接或通过@Controller
中的@Inject
点向您提供数据提供者XY
,并将其添加到模型中
是由IoC容器管理的另一个类吗?请注意
在使用
时是多余的。还要删除它告诉我们您在何处声明和使用DataProviderXY
bean。告诉我们您的ResultsVDAO
类。@BartResultsVDAO
类是不相关的。如果没有注册的bean,上下文会抱怨。它来自javax.inject包,优先于javax.inject.inject中的@AutowiredIt。我得到相同的p使用@Autowired时出现问题。我可能理解错了您的问题…示例代码用在“ptra.freecharts”包中。我们说的是@Inject
注释。它来自哪个包?看看您的import
语句。@AndreiNicusan最好用注释DAO类。它会使注释的类成为elig对于Spring DataAccessException转换来说,这可能是真的,即使我还不完全了解如何进行转换。我正在使用Spring MVC。我需要学习一点……我试图遵循这个建议,但我仍然没有迷失方向。我将DataProvider注入我的控制器@Inject private DataProviderXY;并将其添加到我的模型中,并将其返回给jsp return新的model和view(“resultFront”、“dataXY”、xy);在此之后有什么建议吗?
<jsp:useBean id="dataXY" class="ptra.freecharts.DataProviderXY" />