我有问题。我想覆盖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。请帮助我。
您在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");