Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 自动连线依赖项注入失败-无法自动连线字段(Spring)_Java_Spring_Spring Mvc_Autowired_Stardog - Fatal编程技术网

Java 自动连线依赖项注入失败-无法自动连线字段(Spring)

Java 自动连线依赖项注入失败-无法自动连线字段(Spring),java,spring,spring-mvc,autowired,stardog,Java,Spring,Spring Mvc,Autowired,Stardog,我正在构建一个应用程序,它通过snarlapi与前端的Springboot连接到Stardog数据库。snarlTemplate的自动连线bean工作正常,但我定义的任何组件都有问题。我已经取出了ValidationDAO的自动连线并将其加载。我已经看过其他有同样问题的帖子,但我找不到解决办法。 首先,这里是DAO(我已将其注释为组件)。。。验证是在不同文件中定义的POJO。 src/main/java/validation/ValidationDAO.java @ComponentScan("

我正在构建一个应用程序,它通过snarlapi与前端的Springboot连接到Stardog数据库。snarlTemplate的自动连线bean工作正常,但我定义的任何组件都有问题。我已经取出了ValidationDAO的自动连线并将其加载。我已经看过其他有同样问题的帖子,但我找不到解决办法。

首先,这里是DAO(我已将其注释为组件)。。。验证是在不同文件中定义的POJO。
src/main/java/validation/ValidationDAO.java

@ComponentScan("com.complexible.stardog.ext.spring")
@Component
public class ValidationDAO {

    private static final Logger logger = LoggerFactory.getLogger(ValidationDAO.class);

    @Autowired
    public SnarlTemplate snarlTemplate;

    public List<Validation> validate() {

        // TODO: file input

        String query = "SELECT * WHERE { ?s ?p ?o }";

        logger.debug("DAO Query: " + query);
        List<Validation> results = snarlTemplate.query(query, new RowMapper<Validation>() {

            public Validation mapRow(BindingSet bindingSet) {
                Validation v = new Validation();

                // set results of query
                v.setSubject(bindingSet.getValue("s").stringValue());
                v.setPredicate(bindingSet.getValue("p").stringValue());
                v.setObject(bindingSet.getValue("o").stringValue());

                // set error message
                v.setError("No given description.");

                return v;
            }
        });

        return results;
    }

    public SnarlTemplate getSnarlTemplate() {
        return snarlTemplate;
    }

    public void setSnarlTemplate(SnarlTemplate snarlTemplate) {
        this.snarlTemplate = snarlTemplate;
    }

}
@RestController
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    public ValidationDAO validationDAO;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {

        List<Validation> results = validationDAO.validate();
        logger.debug("Found " + results.size() + " errors in ontology.");
        model.addAttribute("results", results);
        return "home";

    }

    public ValidationDAO getValidationDAO() {
        return validationDAO;
    }

    public void setValidationDAO(ValidationDAO validationDAO) {
        this.validationDAO = validationDAO;
    }

}

ComponentScan注释应该在配置中,而不是在component类中。我真的不知道它是否有效,它包含一个你没有提到的包

第二点:不要使用现场注入。()

现在回到问题上来:我认为您在xml文件中的组件扫描是错误的,或者您的包有一些令人困惑的名称。但我非常确定这是您的maven/gradle文件路径;)它不应该包含文件路径,而应该只包含包
验证

<context:component-scan base-package="validation"/><context:annotation-config/>

ComponentScan注释应该在配置中,而不是在component类中。我真的不知道它是否有效,它包含一个你没有提到的包

第二点:不要使用现场注入。()

现在回到问题上来:我认为您在xml文件中的组件扫描是错误的,或者您的包有一些令人困惑的名称。但我非常确定这是您的maven/gradle文件路径;)它不应该包含文件路径,而应该只包含包
验证

<context:component-scan base-package="validation"/><context:annotation-config/>

您确定已加载xml配置吗


您确定已加载xml配置吗



我相信是这样,因为当我从ValidationDAO中删除自动连接时,Snarl模板被加载进来了。你认为摆脱XML配置(如他们所说)并使用@configuration类更好吗?就个人而言,我不太喜欢只使用注释的配置。我发现很难追踪所有带注释的类,并且根据各种配置更改接口的实现非常复杂。我对不变的东西使用注释,对可以配置的东西使用XML。所以我的产品配置在一个文件中。我做了一些测试,并用模拟类构建了您的配置。在我看来,xml似乎从未被读取过。只需移动@SpringBootApplication类中的配置注释,就可以发挥神奇的作用。另外,如果您真的加载了xml,它会创建要注入的对象,而您不需要使用componentScan…嗯,这很奇怪。我尝试移动配置注释,但它对我无效。。。我想知道这两者之间有什么不同。我相信是的,因为当我从ValidationDAO中删除自动连接时,Snarl模板被加载进来了。你认为摆脱XML配置(如他们所说)并使用@configuration类更好吗?就个人而言,我不太喜欢只使用注释的配置。我发现很难追踪所有带注释的类,并且根据各种配置更改接口的实现非常复杂。我对不变的东西使用注释,对可以配置的东西使用XML。所以我的产品配置在一个文件中。我做了一些测试,并用模拟类构建了您的配置。在我看来,xml似乎从未被读取过。只需移动@SpringBootApplication类中的配置注释,就可以发挥神奇的作用。另外,如果您真的加载了xml,它会创建要注入的对象,而您不需要使用componentScan…嗯,这很奇怪。我尝试移动配置注释,但它对我无效。。。我想知道两者之间有什么不同。如何在配置中设置ComponentScan?这应该是一个配置java文件吗?对不起,这些注释对我来说是新的,我确信我使用它们的方式不正确。此外,我尝试了“验证”包,但仍然失败。因为您使用的是SpringBoot,所以您可以首先将
@ComponentScan
注释应用到入口点类(启动spring boot应用程序的类)。页面末尾的示例:哦!这很有道理。它仍然没有运行,所以我可能不得不回去重组一切。我认为问题在于XML,所以我可能会尝试删除它,并使用spring配置完成所有工作。我还认为您应该避免使用XML配置文件。在我看来,它们已经没有“主流”用例了。我建议在构建包之后,将您的整个配置(看起来没有那么多;)放在config类中。如果应用程序运行正常,您可以重构配置并将其拆分为多个配置类。谢谢,我将考虑以这种方式重做配置!如何在配置中设置ComponentScan?这应该是一个配置java文件吗?对不起,这些注释对我来说是新的,我确信我使用它们的方式不正确。此外,我尝试了“验证”包,但仍然失败。因为您使用的是SpringBoot,所以您可以首先将
@ComponentScan
注释应用到入口点类(启动spring boot应用程序的类)。页面末尾的示例:哦!这很有道理。它仍然没有运行,所以我可能不得不回去重组一切。我认为问题在于XML,所以我可能会尝试删除它,并使用spring配置完成所有工作。我还认为您应该避免使用XML配置文件。在我看来,它们已经没有“主流”用例了。我建议在构建包之后,将您的整个配置(看起来没有那么多;)放在config类中。如果应用程序运行正常,您可以重构并
<context:component-scan base-package="validation"/><context:annotation-config/>