SpringBootApplication AnnotationConfigApplicationContext NoSuchBeanDefinition

问题描述 投票:0回答:1

我有问题。我想覆盖AnnotationConfigApplicationContext。但是我得到了NoSuchBeanDefinition。

我有一些类,它具有构造函数和任何方法

import com.package.pack1;

public class Train {

 public Train (){}

 ...//other methods
}

我也使用@SpringBootApplication在tomcat 7上启动它

import com.package.pack2;


@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {

        private AnnotationConfigApplicationContext context;

        public static void main(String[] args) {
            SpringApplication.run(SpringBootTomcatApplication.class, args);
        }

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                    context = new AnnotationConfigApplicationContext();
                    Train train = new Train();
                    context.getBeanFactory().registerSingleton("Train",train); 
                    context.scan("com.package.pack1");
                    context.refresh();
                    return application.sources(SpringBootTomcatApplication.class);
        }



}

以及需要从自动装配中使用Train.class的控制器

package com.package.pack2;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

@Autowired
private Train train;


}

但是当我在服务器上启动它时。我收到消息:在HelloController NoSuchBeanDefinition上将参数设置为Train。请帮助我。

java spring spring-boot spring-restcontroller
1个回答
0
投票

您在HelloController程序包中具有控制器类com.package.pack2,而不是com.package.pack1的子程序包。但是Component scan只是为com.package.pack1软件包启用的,因此您还需要为com.package.pack2启用它]

context.scan(new String[] {"com.package.pack1","com.package.pack2"});

或者您可以为com.package下的所有子包启用组件扫描。

 context.scan("com.package");
© www.soinside.com 2019 - 2024. All rights reserved.