Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException_Java_Spring_Jsp_Spring Mvc_Cewolf - Fatal编程技术网

Java 当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException

Java 当使用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

我对春天还很陌生,这让我很困惑。我尝试注入我的DAO实现,它在控制器类中工作,但在另一个类中,当使用完全相同的代码时,我得到NullPointerException

@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
类。@Bart
ResultsVDAO
类是不相关的。如果没有注册的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" />