SpringBoot错误:没有名为' myController'可得到

时间:2018-04-21 14:06:03

标签: java spring spring-boot

我正在构建一个基本的节目" hello world"在SpringBoot中

代码

MyController.java

package controllers;
import org.springframework.stereotype.Controller;

@Controller
public class MyController {
    public String hello() {
        System.out.println("Hello World");
        return "foo";
    }
}

DemoApplication.java

package di.prac;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import controllers.MyController;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext ctx=SpringApplication.run(DemoApplication.class, args);
        MyController m = (MyController)ctx.getBean("myController");
        m.hello();
        System.out.println("*******"+Arrays.asList(ctx.getBeanDefinitionNames()));

    }
}

我正在使用 eclipse 并从http://start.spring.io/创建此项目而没有任何依赖项。

我了解到Spring创建了名为 myController MyController 类的bean,但Spring无法找到 myController bean

错误

  

线程中的异常" main"   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   bean名为' myController'可在   org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:686)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1210)     在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)     在   org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089)     在di.prac.DemoApplication.main(DemoApplication.java:16)

请查找并解释项目中的错误

3 个答案:

答案 0 :(得分:4)

将您的控制器放在from pyspark.sql.functions import max as max_ # get last partition from all deltas alldeltas=sqlContext.read.json (alldeltasdir) last_delta=alldeltas.agg(max_("ingest_date")).collect()[0][0] 的子包下,如di.prac或在您的控制器上使用di.prac.controllers

答案 1 :(得分:2)

要使您的控制器在Spring的上下文中可用,您需要定义它由Spring容器管理。只有@Controller注释是不够的,它只表示bean的构造型,以及注释@Repository和@Service。

如果bean具有这些注释并由Spring管理,那是因为Spring编写的用于搜索它们的包已经以编程方式或按xml指定。在您的情况下,您应该使用其他2个注释来注释您的DemoApplication类:

  1. @Configuration - 允许访问spring上下文
  2. @ComponentScan - Spring要扫描的软件包

    @Configuration
    @ComponentScan (basePackages = {"controllers"})
    public class DemoApplication {
            public static void main(String[] args) {
            ApplicationContext ctx=SpringApplication.run(DemoApplication.class, args);
            MyController m = (MyController)ctx.getBean("myController");
            m.hello();
            System.out.println(Arrays.asList(ctx.getBeanDefinitionNames())); 
        }
    }
    

答案 2 :(得分:1)

遇到同样的问题,解决方法很简单。您只是在错误的地方创建了程序包“ controllers”。它不应在java文件夹中创建,而应在具有项目名称的文件夹下创建。简单但致命的错误。您的代码写得很好。